CakePHP - 最有效的深度检查

时间:2014-01-14 08:39:11

标签: php cakephp cakephp-2.0 cakephp-2.3

我在Cake中有很深的关联:

User
---- Garage
---- ---- Vehicle
---- ---- ---- VehicleAlbum

检查VehicleAlbum是否属于某个用户的最佳方法是什么? 因为做一个递归3是非常昂贵的。我看了包含,这是最好的解决方案吗?

谢谢,Josh。

2 个答案:

答案 0 :(得分:2)

没有递归3(see book)这样的东西。

您也不能使用Containable根据子条件限制您的查找结果(see reasoning)。

我假设你想要做这样的事情(从Garage开始减少一个需要的查询,因为它有用户id作为字段):

$this->Garage->find('all', array(
    'conditions' => array(
        'Garage.user_id' => $userId
    ),
    'joins' => array(
        array(
            'table' => 'vehicles',
            'alias' => 'Vehicle',
            'type' => 'inner',
            'conditions' => array(
                'Vehicle.garage_id = Garage.id'
            )
        ),
        array(
            'table' => 'vehicle_albums',
            'alias' => 'VehicleAlbum',
            'type' => 'inner',
            'conditions' => array(
                'VehicleAlbum.vehicle_id = Vehicle.id',
                'VehicleAlbum.id' => $vehicleAlbumId
            )
        )
    )
));

如果是所有者则应返回结果,否则返回空。

答案 1 :(得分:0)

除非您提出错误的查询,否则不会很昂贵。好吧写一个查询并加入所有四个表并运行说明...然后检查它是昂贵还是便宜。在你的情况下,如果这些表如上所示连接,那么你必须为连接查询付费,除了改变表之间的关系之外别无他法。