使用cakephp';s查找此复杂SQL的方法
我想使用CakePHP的find方法,这样就可以利用它的模型关联。问题是我有这个复杂的SQL搜索,我不知道如何将它转换成CakePHP的find方法。我刚刚在ID上使用了$model->query(),然后使用了Set::extract。问题是我失去了关联顺序。如何将其转换为Cake中的find方法,以便使用关联 SQL:使用cakephp';s查找此复杂SQL的方法,sql,cakephp,orm,model,Sql,Cakephp,Orm,Model,我想使用CakePHP的find方法,这样就可以利用它的模型关联。问题是我有这个复杂的SQL搜索,我不知道如何将它转换成CakePHP的find方法。我刚刚在ID上使用了$model->query(),然后使用了Set::extract。问题是我失去了关联顺序。如何将其转换为Cake中的find方法,以便使用关联 SQL: SELECT id, title, SUM(relevance) as total_relevance FROM ( SELECT card_def
SELECT id, title, SUM(relevance) as total_relevance FROM (
SELECT
card_definitions.id,
card_definitions.title,
(MATCH(card_definitions.title) AGAINST ('%s')) * 5 AS relevance
FROM card_definitions
UNION
SELECT
card_definitions.id,
card_definitions.title,
(MATCH(card_def_identities.special_ability_text) AGAINST ('%s')) * 0.5 AS relevance
FROM card_def_identities
INNER JOIN card_definitions ON card_def_identities.card_def_sid = card_definitions.id
UNION
SELECT
card_definitions.id,
card_definitions.title,
(MATCH(brigades.brigade_color) AGAINST ('%s')) AS relevance
FROM brigades
INNER JOIN card_def_brigades ON brigades.id = card_def_brigades.brigade_sid
INNER JOIN card_definitions ON card_def_brigades.card_def_sid = card_definitions.id
UNION
SELECT
card_definitions.id,
card_definitions.title,
(MATCH(identifiers.identifier) AGAINST ('%s')) AS relevance
FROM identifiers
INNER JOIN card_def_identifiers ON identifiers.id = card_def_identifiers.identifier_sid
INNER JOIN card_definitions on card_def_identifiers.card_def_sid = card_definitions.id
UNION
SELECT
card_definitions.id,
card_definitions.title,
(MATCH(card_effects.effect) AGAINST ('%s')) AS relevance
FROM card_effects
INNER JOIN card_def_effects ON card_effects.id = card_def_effects.effect_sid
INNER JOIN card_definitions on card_def_effects.card_def_sid = card_definitions.id
) AS combined_search
GROUP BY id
HAVING total_relevance > 0
ORDER BY total_relevance DESC
LIMIT 10;
%s
被搜索查询替换
感谢您提供的帮助。两件事:
首先,CakePHP不支持工会的直接出炉。如果您想以cakey方式重新创建它,而不只是将其转储到query()中,那么您应该看看Chucks的解决方案,他在其中手动创建子查询:。虽然这是为Cake 1.2编写的,但它应该为您指明正确的方向。当前关于子查询的文档可以在这里找到:book.cakephp.org/2.0/en/models/retrieving your data.html#sub querys
其次,在开始将此查询硬塞进蛋糕中之前,您可能会发现,在数据库中使用存储过程是一种很好的情况,因为看起来此查询在没有修改的情况下重复使用(这只是一个搜索吗?)。一旦创建了过程,就可以在模型中创建一个直接调用它的方法。以下是MySQL文档必须说明的内容:但使用Adminer(Adminer.org)或phpMyAdmin等工具,这个过程甚至更简单
(很抱歉粘贴了URL-我仅限于两个实际链接!)两件事:
首先,CakePHP不支持工会的直接出炉。如果您想以cakey方式重新创建它,而不只是将其转储到query()中,那么您应该看看Chucks的解决方案,他在其中手动创建子查询:。虽然这是为Cake 1.2编写的,但它应该为您指明正确的方向。当前关于子查询的文档可以在这里找到:book.cakephp.org/2.0/en/models/retrieving your data.html#sub querys
其次,在开始将此查询硬塞进蛋糕中之前,您可能会发现,在数据库中使用存储过程是一种很好的情况,因为看起来此查询在没有修改的情况下重复使用(这只是一个搜索吗?)。一旦创建了过程,就可以在模型中创建一个直接调用它的方法。以下是MySQL文档必须说明的内容:但使用Adminer(Adminer.org)或phpMyAdmin等工具,这个过程甚至更简单
(很抱歉粘贴URL-我被限制为两个实际链接!)