I'm trying to figure out how the Repository pattern works and how it can be implemented in a custom MVC pattern.
As far as i understand it, the Repository is a layer which simply returns data from an entity class or saves the entity class to a persistent layer.
Now i currently see it like this:
A request comes in into my controller to create a user. Just a username and password. My controller will do something like this:
function CreateAction ( )
{
    $userRepo = new userRepository ( );
    $user = new userEntity ( );
    $user->setUsername('user');
    $user->setPassword('123456');
    $userRepo->create($user);
}
Then my userRepository class looks like this:
class userRepository
{
    public function create ( User $user )
    {
        $this->db->exec ( "INSERT INTO ... QUERY TO SAVE THE USER" );
    }
}
And my userEntity class looks like this:
class userEntity
{
    private $username;
    private $password;
    public function setUsername ( $username )
    {
        $this->username = $username;
    }
    public function getUsername ( )
    {
        return $this->username;
    }
    public function setPassword ( $password )
    {
        $this->password = $password;
    }
    public function getPassword ( )
    {
        return $this->password;
    }
}
Now the first thing that i think is wrong here is that i'm using a query inside the repository class. Where do i actually save the userEntity class to the database? So in other words, where do i perform the actual SQL queries? I guess the proper way would be to call a DAO inside the 'create' method of the repository. But i'm still trying to figure out how a DAO really looks and how different it is compared to a 'Model' in terms of the Model in a MVC pattern.
But other than that, is this the proper way of implementing the repository pattern??
Your Repository looks much more like a TableDataGateway to me. The idea of a Repository is to be another layer on top of the mapping layer that mediates between the domain objects and the database. It also serves as an in-memory storage of domain objects (something that is missing from your example) and may encapsulate a Factory for creating new Entities. They often also allow for querying the Repository by Specification patterns:

It's a rather complex pattern. You can find good write-ups about Repository in
Also check Good Domain Driven Design samples
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With