我正在使用CakePHP,这是我的数据库的结构:
CarMakes ---------------------------------- ID Slug Name 16 ford Ford CarModels ---------------------------------- ID Name CarMake_ID 10 Escort 16 Cars ---------------------------------- ID Name CarModel_ID 1 My car 10
我想通过CarMakes.Slug查看汽车列表
所以网址是: http://localhost/cars/ford
任何想法或一般信息指示?
答案 0 :(得分:4)
您可以使用findBy()
或findAllBy()
根据ID以外的其他内容检索记录。如果您需要为查询提供条件,请使用常规find()
:
$this->Car->find(
'all',
array(
'conditions' => array(
'CarMake.Slug' => $slug,
'Car.Name LIKE' => $name
),
)
);
此外,对于您尝试设置的网址,您需要为/cars
创建route:
Router::connect(
'/cars/:make',
array('controller' => 'cars', 'action' => 'bymake'),
array(
'pass' => array('make'),
'make' => '[A-Za-z]+'
)
);
修改强>
如果您的条件基于您的模型的直接关联,则上述方法有效。如果您的条件是递归关联(即Car-> CarModel-> CarMake),则需要使用显式连接:
$result = $this->Car->find('all', array(
'joins' => array(
array(
'table' => 'car_models',
'type' => 'inner',
'foreignKey' => false,
'conditions' => array('car_models.id = Car.car_model_id')
),
array(
'table' => 'car_makes',
'type' => 'inner',
'foreignKey' => false,
'conditions' => array(
'car_makes.id = car_models.car_make_id',
'car_makes.slug' => $slug
)
)
),
'conditions' => array(
'Car.name LIKE' => $name
)
));