【发布时间】:2017-07-25 09:47:54
【问题描述】:
我在使用 find() 方法和在 cakephp 2 中深度连接时遇到问题。
我正在构建一个 search() 函数,它应该在 3 个模型中搜索:联系人、建筑物和城市,其中联系人包含包含城市的建筑物。
这是我的要求:
$options['contain'] = array(
'User' => array(
'fields' => array('id', 'first_name', 'last_name')
),
'Building' => array(
'City' => array(
'fields' => array('name')
),
'fields' => array('id', 'title')
)
);
$options['conditions']['OR'] = array(
array('Contact.id LIKE' => '%'.$search.'%'),
array('User.first_name LIKE' => '%'.$search.'%'),
array('User.last_name LIKE' => '%'.$search.'%'),
array('Building.title LIKE' => '%'.$search.'%'),
array('Building.City.name LIKE' => '%'.$search.'%'),
);
$contacts = $this->Contact->find('all', $options);
但这会产生以下WHERE 条件:
WHERE `Contact`.`white_label_id` = 18 AND ((`User`.`first_name` LIKE '%jean%') OR (`User`.`last_name` LIKE '%jean%') OR (`Building`.`title` LIKE '%jean%') OR (`Building`.`City`.`name` LIKE '%jean%'))
问题出在城市模型上,我无法在名称字段中进行搜索。有人可以帮我吗?
【问题讨论】:
-
如果我错了请纠正我,是
array('Building.City.name LIKE' => '%'.$search.'%'),还是array('City.name LIKE' => '%'.$search.'%'),? -
@KevinKyaw 这不起作用......在这两种情况下,我都会收到相同的消息“找不到列:1054 未知列 City.name / Building.City.name”
-
看来你需要加入城市模型
-
你认为 BindModel 合适吗?
-
这取决于你的逻辑。如果你不想要,你可以轻松加入。