Как получить модель, которая инициирует вызов saveAll в связанной модели - PullRequest
0 голосов
/ 02 марта 2012

Возможно ли получить модель, которая пытается сохранить данные в связанной модели в транзакции saveAll. Например, у пользователя много целей, и я звоню;

$this->User->saveAll($data);

Могу ли я получить пользователя модели в классе Goal Model с помощью некоторого предопределенного атрибута, метода или механизма?

Спасибо за вашу помощь заранее, Roland.

Edit: Предположим гипотетическую ситуацию, когда у пользователя есть картинки с моделью изображений и сообщениями (блогами) с соответствующей моделью. Обе они могут быть прокомментированы. Поэтому вместо того, чтобы создавать отдельную модель комментариев для каждой из этих моделей, я создаю одну центральную модель комментариев. Ассоциация может выглядеть так:

    //In the Picture model
    var $hasMany = array(
``    'Comment' => array(
        'className' => 'Comment',
        'foreignKey' => 'picture_id',
        'conditions' => array('Comment.objectType' => 'picture')
      )`
    );

Ассоциация для модели Post будет аналогичной, с той лишь разницей:

'conditions' => array('Comment.objectType' => 'post')

С этой структурой, если бы я запросил любую из этих Моделей, их соответствующие комментарии будут получены из таблицы БД с использованием поля objectType.

Если бы я сделал что-то вроде;

$this->Picture->saveAll($data);

или

$this->Post->saveAll($data);

с хорошо структурированным массивом $ data и содержащим часть «Комментарии» для сохранения, в какой-то момент времени во время транзакции сохранения данные будут сохранены в таблице комментариев через модель «Комментарий». Мне нужно знать, что именно модель Picture пытается сохранить комментарий в методе beforeSave модели Comment, т.е.

//In the Comment mode
    beforeSave() {
      //Post model is trying to save a comment here
    }

1 Ответ

0 голосов
/ 03 марта 2012

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

В пользовательской модели

var $hasMany = array('Goal');

В GoalModel

function myCrazyFunc() {
    //crazy stuff happens here
}

В UsersController

$this->Goal->myCrazyFunc();
//more stuff
$this->User->saveAll($data);
...