Реляционная Active Record

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
DmitryVolhov
Сообщения: 18
Зарегистрирован: 2011.07.15, 11:29

Реляционная Active Record

Сообщение DmitryVolhov »

Очень удобно работать с реляционной Active Record, например:

Код: Выделить всё

$author->profile->website
Но на сайте описана документация только к чтению таким способом. Правильно ли я понимаю, что записывать данные таким способом не прокатит (пробовал, но запись либо не проходит, либо выдает ошибку)?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Реляционная Active Record

Сообщение rak »

прокатит
DmitryVolhov
Сообщения: 18
Зарегистрирован: 2011.07.15, 11:29

Re: Реляционная Active Record

Сообщение DmitryVolhov »

rak писал(а):прокатит
Т.е. автоматически сохранятся и связанные объекты? Есть где-то примеры подобного использования?
DmitryVolhov
Сообщения: 18
Зарегистрирован: 2011.07.15, 11:29

Re: Реляционная Active Record

Сообщение DmitryVolhov »

Ключи и связи прописаны (innBD). Считывает все нормально, т.е. все нужные данные цепляет, но записывает не так. В действии контроллера написал:

Код: Выделить всё

        $user=new User();
        $user->posts=new Post();
        $user->posts->title='new post 1';
        $user->posts->content='text';
        $user->posts->create_time=time();
        $user->username='user1';
        $user->password='123456';
        $user->email='154784@jaj.com';
 
Новый пользователь (user) добавляется, но новый пост не добавляется (ошибок не выводит).

В user прописано:

Код: Выделить всё

        return array(
            'posts' => array(self::HAS_MANY, 'Post', 'author_id'),
            'profile' => array(self::HAS_ONE, 'Profile', 'owner_id'),
        );
 
в общем прописан все как в примере и чтение (выборка) работает на ура, а вот запись таким вот образом не получается. Действительно ли существует такая возможность?
DmitryVolhov
Сообщения: 18
Зарегистрирован: 2011.07.15, 11:29

Re: Реляционная Active Record

Сообщение DmitryVolhov »

Вот так, конечно, все проходит нормально (добавляет и нового пользователя и новый его пост):

Код: Выделить всё

        $user=new User();
        $user->username='user1';
        $user->password='123456';
        $user->email='154784@jaj.com';
        if ($user->save())
        {
            $user->posts=new Post();
            $user->posts->title='new post 1';
            $user->posts->content='text';
            $user->posts->create_time=time();
            $user->posts->author_id=$user->id;
            $user->posts->save();
        }
 
Но хотелось бы узнать, возможно ли, чтобы при вызове $user->save() автоматически добавлялся не только пользователь, но и пост.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Реляционная Active Record

Сообщение rak »

Код: Выделить всё

$user->posts->save();
$user->save(); 
DmitryVolhov
Сообщения: 18
Зарегистрирован: 2011.07.15, 11:29

Re: Реляционная Active Record

Сообщение DmitryVolhov »

rak писал(а):

Код: Выделить всё

$user->posts->save();
$user->save(); 
Хм... Так да, отдельно сохраняются посты, а затем сохраняется пользователь (ну или наоборот - неважно). Я то как раз думал, что можно через вызов

Код: Выделить всё

$user->save() 
сохранить не только пользователя, но и связанные с ним другие модели, например, посты. Получается, что так нельзя.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Реляционная Active Record

Сообщение rak »

ага, так нельзя
DmitryVolhov
Сообщения: 18
Зарегистрирован: 2011.07.15, 11:29

Re: Реляционная Active Record

Сообщение DmitryVolhov »

rak писал(а):ага, так нельзя
спасибо за помощь
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Реляционная Active Record

Сообщение esche »

DmitryVolhov писал(а):сохранить не только пользователя, но и связанные с ним другие модели, например, посты. Получается, что так нельзя.
http://yiiframework.ru/doc/cookbook/ru/ ... lated.data
Код сохранения связанных данных можно размещать в afterSave()
...
DmitryVolhov
Сообщения: 18
Зарегистрирован: 2011.07.15, 11:29

Re: Реляционная Active Record

Сообщение DmitryVolhov »

esche писал(а):
DmitryVolhov писал(а):сохранить не только пользователя, но и связанные с ним другие модели, например, посты. Получается, что так нельзя.
http://yiiframework.ru/doc/cookbook/ru/ ... lated.data
Код сохранения связанных данных можно размещать в afterSave()
Спасибо)
Ответить