我试图使用CakePHP 1.3.5的searchable behavior与中可容纳的行为返回的搜索结果指定模型和相关的模型(文章属于关联用户)。获取CakePHP的搜索行为导致含有更深协会
忽略了一会儿,以下调用的搜索行为find()方法:
$this->Article->find('all', array(
'conditions' => array('Article.is_published' => 1),
'fields' => array('Article.id'),
'contain' => array('User.name')
));
执行此SQL查询:
SELECT `Article`.`id`, `User`.`name`, `User`.`id` FROM `articles` AS `Article` LEFT JOIN `users` AS `User` ON (`Article`.`user_id` = `User`.`id`) WHERE `Article`.`is_published` = 1
,并返回下面的数组:
Array (
[0] => Array (
[Article] => Array (
[id] => 10
)
[User] => Array (
[name] => Author Name
[id] => 7
)
)
...
)
这正是预期的。但是,下面的调用搜索():
$this->Article->search($query, array(
'conditions' => array('Article.is_published' => 1),
'fields' => array('Article.id'),
'contain' => array('Article' => array('User.name'))
));
执行此SQL查询:
SELECT `Article`.`id` FROM `search_index` AS `SearchIndex` LEFT JOIN `articles` AS `Article` ON (`SearchIndex`.`model` = 'Article' AND `SearchIndex`.`association_key` = `Article`.`id`) WHERE `Article`.`is_published` = 1 AND MATCH(`SearchIndex`.`data`) AGAINST('search term' IN BOOLEAN MODE) AND `Article`.`id` IS NOT NULL
,并返回该数组:
Array (
[0] => Array (
[Article] => Array (
[id] => 9
)
)
...
)
望着搜索()方法,它返回$this->SearchIndex->find('all', $findOptions);
。 $ findOptions包含以下内容:
Array (
[conditions] => Array (
[Article.is_published] => 1
[0] => MATCH(SearchIndex.data) AGAINST('search term' IN BOOLEAN MODE)
)
[fields] => Array (
[0] => Article.id
)
[contain] => Array (
[Article] => Array (
[0] => User.name
)
)
)
的关联没有得到沿途丢失,因为里面SearchableBehavior,$this->SearchIndex->Article->belongsTo['User']
存在和完整,立即前后打电话找()搜索()内方法。
调用搜索()返回所有的下列值完全相同的事情“包含”:
array('Article' => array('User.name'))
array('Article' => array('User'))
array('Article' => array('User' => array()))
array('Article' => array('User' => array('fields' => array('User.name'))))
array('Article' => array('User' => array('fields' => array('name'))))
难道我做错了什么?我想我使用的格式与the CakePHP documentation中指示的相同,我还没有发现任何在线内容,这表明你必须做一些特殊的事情才能获得带有关联数据的搜索结果。
我知道我可以通过查找附加调用find()来查找用户,从而轻松实现我想要的结果,但是我希望获得可容纳的行为,以便像它应该的那样工作,并减少不必要的行为额外数据库查询。
感谢您的联系!我不知道它存在搜索行为。我稍后会检查它,它有用吗?据推测,这是 – metrobalderas 2010-12-10 16:36:39
。它会进行全文搜索,并且可以根据您的数据索引进行定制,但是我显然遇到了这个问题,要求它返回相关的模型数据。 – 2010-12-10 17:02:02