CakePHP - пытается включить связанные данные модели в find ('all') - PullRequest
0 голосов
/ 18 октября 2011

Итак, я нахожу некоторые данные из одной из моих моделей:

// Models

class SubjectChange extends AppModel {

    public $belongsTo = array('Subject', 'User');

}

class Subject extends AppModel {

    public $hasMany = array('SubjectChange');

    public $belongsTo = array('SubjectGroup');

}


// Controller code to get all SubjectChanges

$subjectChanges = ClassRegistry::init('SubjectChange')->find('all', array(
    'contain' => array(
        'Subject.name',
        'User.full_name'
    )
));

Это возвращает мне каждый SubjectChange, как это, и это здорово:

Array
(
    [SubjectChange] => Array
    (
        [id] => 35,
        [subject_group_id] => 5,
        [timestamp] => '2011-10-18 16:52:24'
    )

    [Subject] => Array
    (
        [name] => 'English'
    )

    [User] => Array
    (
        [full_name] => 'John Smith'
    )

)

Но я хочу добавить к этому имя SubjectGroup, используя subject_group_id из части SubjectChange. Здесь важно отметить, что модель SubjectChange не не имеет никакого отношения к модели SubjectGroup, и , которую я не могу получить из Subject, поскольку она может иметь другое subject_group_id в настоящее время хранится в базе данных.

Я просто хочу выполнить какое-то соединение в моем запросе, чтобы получить имя SubjectGroup из имеющегося у меня SubjectChange subject_group_id, чтобы добавить эти данные к приведенному выше:

[SubjectGroup] => Array
    (
        [name] => 'My Group Name'
    )

Это вообще возможно?

1 Ответ

1 голос
/ 18 октября 2011

Тогда я собираюсь сделать полный ответ.

У вас есть 3 способа сделать это:

нормальный и первый, который вы должны использовать, это объявления ассоциаций в var hasMany, var BelongsTo и т. Д. *

второй способ - сделать первый путь на лету

 $this->Leader->bindModel(
        array('hasMany' => array(
                'Principle' => array(
                    'className' => 'Principle',
                     //other attributes
                )
            )
        )
    );

просто используйте для этого функцию bindModel, вы можете посмотреть больше этого в книге

Третий способ - принудительное соединение в находке, для этого вы можете посмотреть подробнее в книге здесь

Возможно, есть еще варианты, но я их сейчас не помню. Во всяком случае, это те, которые достаточно легко :)

Надеюсь, это поможет вам

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