モデルの関連付けを利用できるように、CakePHP の find メソッドを使用したいと考えています。問題は、この複雑な SQL 検索があり、それを CakePHP の find メソッドに変換する方法がわからないことです。$model->query() を使用してから、ID で Set::extract を使用しています。問題は、関連性の順序が失われることです。関連付けを使用できるように、これを Cake の find メソッドに変換するにはどうすればよいですか?
SQL:
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
検索クエリに置き換えられます。
ご協力いただきありがとうございます。