Я заранее извиняюсь, если на этот вопрос был дан ответ в другом месте; Я искал высокий и низкий для существующего ответа, но вышел пустым. Возможно, я ищу неправильные ключевые слова.CakePHP принадлежит нескольким моделям?
У меня есть три модели, два (студент и наставник) которых имеют отношение $hasMany
к общей модели (Назначение), которая имеет отношения $belongsTo
с обеими другими моделями. Точные модели ниже ...
Студент hasMany НАЗНАЧЕНИЯ ...
class Student extends AppModel {
var $hasMany = array (
'Appointment' => array (
'foreignKey' => 'student_id'
)
);
репетитором hasMany НАЗНАЧЕНИЯ ...
class Tutor extends AppModel {
var $hasMany = array (
'Appointment' => array (
"foreignKey" => 'tutor_id'
)
);
встречу belongsTo Студента и самостоятельно ...
class Appointment extends AppModel {
var $belongsTo = array (
'Student' => array (
'foreignKey' => 'student_id'
),
'Tutor' => array (
'foreignKey' => 'tutor_id'
)
);
при взгляде на запись студента (например, «приложение/студент/вид/4») Мне нужно, чтобы иметь возможность перечислить даты их предстоящих назначений и имя репетитора для этого назначения. Поэтому мне нужно получить доступ к данным из модели Tutor (имя), глядя на модель Student. Прямо сейчас я смог выполнить это, используя $this->Student->query()
, чтобы вытащить связанные записи репетитора, но это приводит к повторению информации учащегося в полученном массиве.
Все отношения $hasMany
и $belongsTo
работают очень хорошо. Имеет ли CakePHP встроенную функцию, которую мне не хватает, чтобы получить связанную информацию, или это нужно сделать где-нибудь где-то?
Попробуйте установить 'рекурсивная => 2' на вашем' find'. Это должно дать вам один дополнительный уровень связанных моделей. – bfavaretto
Спасибо. Это работает, но является ли это масштабируемым решением? Запись студента повторяется для каждой встречи в возвращенном массиве. С 15 полями в этой таблице и 10+ назначений на одного учащегося, это 150 дополнительных полей в каждом запросе. –
Я знаю, был там ... Альтернативы: (1) Контейнер, (2) [принудительное объединение] (http://bakery.cakephp.org/articles/nate/2009/01/21/quick-tip-doing -ad-hoc-joins-in-model-find) или (3) запись запроса вручную. – bfavaretto