CakePHP имеет отношение «один / принадлежит» к модели - PullRequest
4 голосов
/ 24 ноября 2011

У меня есть несколько моделей, которые я пытаюсь связать.

Одна модель Item, одна Slide, а другая Asset.

Предметы имеют несколько слайдов под ними. Активы - это в основном файлы, которые были загружены (изображения, mp3 и т. Д.), А слайды - это то, где отображаются ресурсы. Каждый слайд имеет один актив, но данный актив может принадлежать нескольким слайдам. На слайде определено поле asset_id.

В настоящее время у меня есть модели, определенные как:

Slide

class Slide extends AppModel {
    var $name = 'Slide';

    var $order = array("Slide.order" => "asc");

    var $belongsTo = 'Item';

    var $hasOne = array(
        'Asset' => array(
          'className' => 'Asset',
            'foreignKey' => 'id',
            'dependent' => false
        )
    );

} // Slide class

Эссет

class Asset extends AppModel {
    var $name = 'Asset';

    var $displayField = 'name';

    var $belongsTo= array(
        'Assetdir' => array(
            'className' => 'Assetdir',
            'foreignKey' => 'assetdir_id'
        ),
        'Slide' => array(
            'className' => 'Slide',
            'foreignKey' => 'id'
        )
    );  
} // Asset class

Когда я загружаю слайд, я вижу его родительский элемент Item в возвращаемых данных, но связанный актив - нет. Что я тут не так делаю?

1 Ответ

4 голосов
/ 24 ноября 2011

На самом деле я думаю, что это отношения один-ко-многим между Слайдом и Активом. Со страницы Связи моделей : serveTo: текущая модель содержит внешний ключ. Таким образом, любая модель, имеющая внешний ключ для другого , принадлежит другой один.

Итак, как я это вижу:

Позиция:

  • имеет много слайдов

Слайд:

  • принадлежит элементу (с item_id)
  • принадлежит активу (с идентификатором актива)

Эссет:

  • имеет много слайдов

Для извлечения связанных моделей, которые вы хотите, я бы посоветовал посмотреть на Содержимое поведения .

...