Как можно сделать без внешнего ключа в CakePHP? - PullRequest
0 голосов
/ 31 августа 2011

У меня есть две таблицы, скажем:

TAB1
----
id
tab1_md5


TAB2
----
id
tab2_md5

Я хотел бы создать отношение hasMany без foreignKey, чтобы иметь возможность использовать рекурсивный материал cakephp, но не знаю, как создать отношение. Я пробовал с:

var $hasMany = array(
'Tab2' => array(
'className' => 'Tab2',
'foreignKey' => false))

но я не знаю, что я должен указать в условии

РЕДАКТИРОВАТЬ: отношение tab1.tab1_md5 = tab2.tab2_md5

Ответы [ 2 ]

0 голосов
/ 01 сентября 2011

Это невозможно.Cake должен сделать отдельный запрос для получения данных hasMany.В этом отдельном запросе он использует только первичный ключ связанной модели.AFAIK, в настоящее время нет способа заставить его использовать что-либо, кроме первичного ключа.Поэтому вам придется выполнять эти запросы вручную:

$tab1s = $this->Tab1->find('all', array(...));
$tab2s = $this->Tab2->find('all', array(
    'conditions' => array('Tab2.tab2_md5' => Set::extract('/Tab1/tab1_md5', $tab1s))
));

$grouped = array();
foreach ($tab2s as $tab2) {
    $grouped[$tab2['Tab2']['tab2_md5']][] = $tab2;
}
foreach ($tab1s as &$tab1) {
    $tab1['Tab2'] = isset($grouped[$tab1['Tab1']['tab1_md5']]) ? $grouped[$tab1['Tab1']['tab1_md5']] : array();
}

Что-то в этом роде.Вы можете сделать это автоматически с помощью обратного вызова afterFind в самой модели, чтобы получить автоматический эффект Cake.

0 голосов
/ 31 августа 2011

Я не верю, что вы можете создать отношения hasMany без использования внешнего ключа.В этот момент CakePHP не знает, как эти таблицы должны быть связаны.Не зная взаимосвязи, он не может делать никаких объединений для включения связанных табличных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...