我在Cake中有很深的关联:
User
---- Garage
---- ---- Vehicle
---- ---- ---- VehicleAlbum
检查VehicleAlbum是否属于某个用户的最佳方法是什么? 因为做一个递归3是非常昂贵的。我看了包含,这是最好的解决方案吗?
谢谢,Josh。
答案 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)
除非您提出错误的查询,否则不会很昂贵。好吧写一个查询并加入所有四个表并运行说明...然后检查它是昂贵还是便宜。在你的情况下,如果这些表如上所示连接,那么你必须为连接查询付费,除了改变表之间的关系之外别无他法。