表格
restaurants
cuisines
cuisines_restaurants
餐厅和美食模型都设置为 HABTM。
我正在尝试获取分页餐厅列表,其中 Cuisine.name = 'italian'(示例),但不断出现此错误:
1054: Unknown column 'Cuisine.name' in 'where clause'
它正在构建的实际查询:
SELECT `Restaurant`.`id`, `Restaurant`.`type` .....
`Restaurant`.`modified`, `Restaurant`.`user_id`, `User`.`display_name`,
`User`.`username`, `User`.`id`, `City`.`id`,`City`.`lat` .....
FROM `restaurants` AS `Restaurant` LEFT JOIN `users` AS `User` ON
(`Restaurant`.`user_id` = `User`.`id`) LEFT JOIN `cities` AS `City` ON
(`Restaurant`.`city_id` = `City`.`id`) WHERE `Cuisine`.`name` = 'italian'
LIMIT 10
“.....”部分只是我删除的附加字段,以缩短向您展示的查询。
我不是 CakePHP 专家,所以希望有一些明显的错误。我这样调用分页:
$this->paginate = array(
'conditions' => $opts,
'limit' => 10,
);
$data = $this->paginate('Restaurant');
$this->set('data', $data);
$opts 是一个选项数组,其中一个是 'Cuisine.name' => 'italian'
我也试过设置 $this->Restaurant->recursive = 2;但这似乎没有做任何事情(我想我不应该那样做?)
非常感谢任何帮助或指导。
编辑
models/cuisine.php
var $hasAndBelongsToMany = array('Restaurant');
models/restaurant.php
var $hasAndBelongsToMany = array(
'Cuisine' => array(
'order' => 'Cuisine.name ASC'
),
'Feature' => array(
'order' => 'Feature.name ASC'
),
'Event' => array(
'order' => 'Event.start_date ASC'
)
);
最佳答案
如 this blogpost by me 中所述您必须将相关模型的条件放在分页数组的 contain
选项中。
所以这样的事情应该可行
# in your restaurant_controller.php
var $paginate = array(
'contain' => array(
'Cuisine' => array(
'conditions' => array('Cuisine.name' => 'italian')
)
),
'limit' => 10
);
# then, in your method (ie. index.php)
$this->set('restaurants', $this->paginate('Restaurant'));
关于php - CakePHP - HABTM 分页查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655977/