Торт PHP 2.X - Пара вопросов о HasMany Relation - PullRequest
0 голосов
/ 25 марта 2020

У меня возникли некоторые проблемы с использованием этой старой платформы, которой мне пришлось управлять.

У меня есть эти таблицы:

  • GROUP -> HAS MANY -> MONITOR
  • MONITOR -> HAS MANY -> [СОБЫТИЯ, ЗОНА]
  • MONITOR -> HAS_AND_BELONGS_TO_MANY -> GROUP

Для отношений GROUP -> MONITOR, соединительные таблицы были созданы Cake под названием GROUP_MONITOR.

Это конфигурация HasMany для модели группы:

'Monitor' => array(
'className' => 'Monitor',
'joinTable' =>  'Groups_Monitors',
'foreignKey' => 'GroupId',
'associationForeignKey' => 'MonitorId',

ВОПРОС 1:

Я пытаюсь получить все группы со всеми связанными мониторами. Я нашел рекурсивный ключ, который позволяет go глубоко в отношениях:

$all_groups  = $this->Group->find('all', array('recursive' => 1));

Я получил эту ошибку:

Столбец не найден: 1054 Неизвестный столбец 'Monitor.GroupId' в «списке полей» «

Похоже, что Cake не использует таблицу« Groups_Monitors », а ищет groupId в таблице монитора;

ВОПРОС 2:

Пытаясь получить группы, запрашивающие мониторы, с рекурсивной единицей, я правильно получил все группы, но также и все другие отношения монитора HasMany.

$all_monitors = $this->Monitor->find('all',array("recursive" => 1));

Возможно ли исключить некоторые отношения HasMany при поиске иметь уменьшенный объем данных?

1 Ответ

0 голосов
/ 25 марта 2020

Вы говорите, что у вас есть

GROUP -> HAS MANY -> MONITOR

"Имеет много", не использует таблицу соединений. Для работы этого отношения «монитор» должен иметь внешний ключ, который ссылается на группу. Если вы хотите использовать таблицу соединений, вы должны использовать «имеет и принадлежит многим».

Для Q2 используйте сдерживаемое поведение. Вы сможете подробно указать, какие данные и какие модели вы хотите получить из БД. https://book.cakephp.org/2/en/core-libraries/behaviors/containable.html

...