• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Database MVC seperation problems (beginners question)

#1
[eluser]Slowcheetah[/eluser]
I'm new to OOP, MVC and CodeIgniter. I'm having problems to learn the MVC coding principles. A simple question;

Why this code IS working;

MODEL
Code:
<?php
class Startpagina_Model extends Model {

    function Startpagina_Model()
    {
        // Call the Model constructor
        parent::Model();
        
    }
    
    function Overzicht_Competities()
    {
        $query = $this->db->query('SELECT id, name FROM game_competitions');
        
        foreach ($query->result() as $row)
        {
            echo $row->name;

        }
        
    }
    
}

/* End of file startpagina_model.php */
/* Location: ./system/application/models/startpagina_model.php */

CONTROLLER

Code:
<?php

class Startpagina extends Controller {

    function __construct()
    {
        parent::Controller();
    }


    function index()
    {
        $this->load->model('startpagina_model');
    
        $data['query'] = $this->startpagina_model->Overzicht_Competities();
    
        $this->load->view('startpagina', $data);
    }

}

/* End of file startpagina.php */
/* Location: ./system/application/controllers/startpagina.php */

And this code IS NOT working?

MODEL
Code:
<?php
class Startpagina_Model extends Model {

    function Startpagina_Model()
    {
        // Call the Model constructor
        parent::Model();
        
    }
    
    function Overzicht_Competities()
    {
        $query = $this->db->query('SELECT id, name FROM game_competitions');
        
    }
    
}

/* End of file startpagina_model.php */
/* Location: ./system/application/models/startpagina_model.php */


VIEW

Code:
<html>
<head>
<title>test</title>
</head>
<body>


<?php

foreach ($query->result() as $row)
{
    echo $row->name;
}

?>


</body>
</html>

CONTROLLER

Code:
<?php

class Startpagina extends Controller {

    function __construct()
    {
        parent::Controller();
    }


    function index()
    {
        $this->load->model('startpagina_model');
    
        $data['query'] = $this->startpagina_model->Overzicht_Competities();
    
        $this->load->view('startpagina', $data);
    }

}

/* End of file startpagina.php */
/* Location: ./system/application/controllers/startpagina.php */

#2
[eluser]TheFuzzy0ne[/eluser]
You're not returning the result.

Code:
function Overzicht_Competities()
    {
        return $this->db->query('SELECT id, name FROM game_competitions');
        
    }

#3
[eluser]Slowcheetah[/eluser]
[quote author="TheFuzzy0ne" date="1236068029"]You're not returning the result.[/quote]

Easy as that... thanks!

i suppose this one is also correct?

Code:
function Overzicht_Competities()
    {
        $query = $this->db->query('SELECT id, name FROM game_competitions');
        return $query;
        
    }

#4
[eluser]TheFuzzy0ne[/eluser]
That will work too, although there's not much point in storing the result in a variable as you're not doing anything with the variable other than returning it. Returning the result straight from the query is a little more efficient on RAM usage, and slightly less code to read and maintain.

#5
[eluser]JayTee[/eluser]
What I try to do is imagine that the model, view, and controllers exist on complete separate physical servers - and the controller's job is to handle traffic between them. With that in mind, I'd recommend coding each to handle it's unique job.
Models:
1. Handles all DB interactions
2. Returns record sets to the controller
3. Should rely on input from the controller (shouldn't echo to the browser)

Views:
1. Should NOT have any DB interaction
2. Should only have limited logic and loops for display

Controllers:
1. receive data from the view (forms, clicks, etc)
2. processes/scrubs data
3. moves data between the model and the view

There's something in the wiki that's good to read about MVC:
http://codeigniter.com/wiki/MVC/

#6
[eluser]Slowcheetah[/eluser]
[quote author="JayTee" date="1236068489"]What I try to do is imagine that the model, view, and controllers exist on complete separate physical servers - and the con...........[/quote]

Thanks, i readed this suggestions earlier today in this forum. It's one of the reason's i asked this question..I want to learn the fundaments of mvc and oop..

Thanks for all the help

#7
[eluser]kgill[/eluser]
Honestly, if you're having to ask something as basic as why a function that's missing a return doesn't work, you need to go and learn the basics of PHP & coding first. Jumping in and working on OOP, MVC, and frameworks is fine but without understanding the fundamentals behind it all you're doing yourself a serious disservice.

#8
[eluser]Slowcheetah[/eluser]
[quote author="kgill" date="1236073043"]Honestly, if you're having to ask something as basic as why a function that's missing a return doesn't work, you need to go and learn the basics of PHP & coding first. Jumping in and working on OOP, MVC, and frameworks is fine but without understanding the fundamentals behind it all you're doing yourself a serious disservice.[/quote]

Probably you are right. But what's wrong with learning for a hobby purpose? I learned PHP on a practical rather that a theoratic point of view. (in my old-fashioned 'ad-hoc' PHP programming style i actualy never used the RETURN function), may sound stupid. But now i'm starting to learn those (time-saving) fundamentals an basics so i can bring it a step further.

And i know, it's best to first learn the fundamentals FIRST (i should have learned a few years ago). But this requires some serious concentration, that's my problem.

#9
[eluser]TheFuzzy0ne[/eluser]
[quote author="kgill" date="1236073043"]Honestly, if you're having to ask something as basic as why a function that's missing a return doesn't work, you need to go and learn the basics of PHP & coding first. Jumping in and working on OOP, MVC, and frameworks is fine but without understanding the fundamentals behind it all you're doing yourself a serious disservice.[/quote]
Ouch... It's just as well that not everyone shares your views. I was happy to help, JayTee was also happy to share his pearls of wisdom (which I've enjoyed reading), what's the problem?

Granted, Slowcheetah has much to learn, but the rest of the code looked fine to me, and I've also made the same mistake in the past.

#10
[eluser]kgill[/eluser]
[quote author="Slowcheetah" date="1236073804"]
Probably you are right. But what's wrong with learning for a hobby purpose?
<snip>
And i know, it's best to first learn the fundamentals FIRST (i should have learned a few years ago). But this requires some serious concentration, that's my problem.[/quote]

There's nothing wrong with it, I wasn't suggesting you stop, learning is good but learning without the basics can cause bad habits which makes for bad programming. If you're going to invest the time to learn something, why not do it right. Of course in the end you've got to decide what works best for you.

[quote author="TheFuzzy0ne" date="1236074054"]Ouch... It's just as well that not everyone shares your views. I was happy to help, JayTee was also happy to share his pearls of wisdom (which I've enjoyed reading), what's the problem?[/quote]

You're reading too much into my comment, I said he's doing himself a disservice, without knowing the basics it makes it harder to grasp the more complex things - I don't see how that rates an ouch it's the truth.


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2021 MyBB Group.