We have moved our forum to GitHub Discussions. For questions about Phalcon v3/v4/v5 you can visit here and for Phalcon v6 here.

Can I pre-filter models?

Let's suppose I have a table that represents a vehicle, called Vehicles, and a Phalcon\Model\Vehicles class. There is a type field that represents the type of the vehicle, let's say: car, truck, boat. In my application, I want to provide custom methods for the model class depending on the type of the vehicle. So I did:

class Vehicles extends \Phalcon\Mvc\Model { ... }

class Cars extends Vehicles { 
    protected $type = 'car';
}
class Boats extends Vehicles { 
    protected $type = 'boat';
}

It works fine if I want to create that type of object:

$boat = new Boats();
$boat->customMethod()
    ->save();

Now, let's say I have Users that own vehicles, and I do something like this:

class Users extends \Phalcon\Mvc\Model { 

    public function initialize()
    {        
        $this->hasMany('id', 'Vehicles\Boats', 'users_id', array('alias' => 'Boats'));
        $this->hasMany('id', 'Vehicles\Cars', 'users_id', array('alias' => 'Cars'));
    }
}

If I call $user->getBoats(), the Phalcon\Model's magic method will call getRelationRecords of the modelsManager and return all records from the table vehicles.

Now my question is: is there a way to pre-filter this so I only get one type of record? I guess I'd need to implement a getBoats method and do all the logic there. What do you think?

Is there a better way to accomplish this?



85.5k
Accepted
answer

I think this is what you are searching for

https://github.com/phalcon/cphalcon/issues/926



32.2k

Sweet, thanks!