Вопросы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
karpo518
Сообщения: 120
Зарегистрирован: 2012.08.30, 20:05
Контактная информация:

Вопросы

Сообщение karpo518 »

1. В Yii 2 нет валидации и сохранения связанных моделей из коробки?
2. Пропал CForm. Есть ли альтернатива?
3. Есть 2 связанные модели. Создаем два новых объекта, связываем через link. Link в доках обещает сохранить модель, которую привязываем, чтобы зафиксировать связь. Ок. Сохраняем модели, но выясняется, что поле, используемое в качестве внешнего ключа, не заполнено. Ладно, справедливо, ведь link сохраняет привязываемую модель, а внешний ключ хранится в основной. Тогда меняю местами модели, линкую и сохраняю по обратной связи. Тот же результат:

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

Unable to link models: the primary key of app\models\Item is null.
 
Где логика? Что же мне сохранять, потом линковать, потом опять сохранять модели? Объясните.

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

public function actionCreate()
    {
        $item = new Item();
        
        $seo = new Seo();


        if ($item->load(Yii::$app->request->post()) &&
            $seo->load(Yii::$app->request->post()) &&
            $item->validate() && 
            $seo->validate()) 
        {
            $seo->link('item', $item);
            $seo->item->save(false);
            return $this->redirect(['view', 'id' => $item->id]);
        }
......
class Item extends \yii\db\ActiveRecord
{
    public function getSeo()
    {
        return $this->hasOne(Seo::className(), ['item_id' => 'id']);
    }
......


class Seo extends \yii\db\ActiveRecord
{
    public function getItem()
    {
        return $this->hasOne(Item::className(), ['id' => 'item_id']);
    }
......
 
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Вопросы

Сообщение anton44eg »

думаю нужно

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

$seo->save(false);
 
или

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

$seo->save(false);
$seo->item->save(false);
 
В любом случае MySQL не может в 2 таблицы 1 запросом сохранять
А сохранять сначала зависимую модель, а потом главную - даже по логике странно
Аватара пользователя
norvele
Сообщения: 26
Зарегистрирован: 2013.12.05, 06:26
Откуда: Новосибирск

Re: Вопросы

Сообщение norvele »

И еще лучше использовать транзакции когда нужно сохранять несколько записей сразу.
По 2 вопросу: CForm теперь просто Model
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Вопросы

Сообщение TranceSmile »

1. Из коробки нет.
2. просто Model
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопросы

Сообщение zelenin »

anton44eg писал(а):думаю нужно

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

$seo->save(false);
или

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

$seo->save(false);
$seo->item->save(false);
save(false) - отключение валидации при сохранении. А тут нет ошибок валидации.
anton44eg писал(а): В любом случае MySQL не может в 2 таблицы 1 запросом сохранять
но автор и не говорил об одном запросе
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Вопросы

Сообщение anton44eg »

zelenin писал(а):
anton44eg писал(а):думаю нужно

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

$seo->save(false);
 
или

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

$seo->save(false);
$seo->item->save(false);
 
save(false) - отключение валидации при сохранении. А тут нет ошибок валидации.
anton44eg писал(а): В любом случае MySQL не может в 2 таблицы 1 запросом сохранять
но автор и не говорил об одном запросе
вы вообще читаете пост?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопросы

Сообщение zelenin »

anton44eg писал(а):
zelenin писал(а):
anton44eg писал(а):думаю нужно

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

$seo->save(false);
или

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

$seo->save(false);
$seo->item->save(false);
save(false) - отключение валидации при сохранении. А тут нет ошибок валидации.
anton44eg писал(а): В любом случае MySQL не может в 2 таблицы 1 запросом сохранять
но автор и не говорил об одном запросе
вы вообще читаете пост?
а что я ответил также как и вы вне контекста вопроса?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Вопросы

Сообщение anton44eg »

zelenin писал(а): а что я ответил также как и вы вне контекста вопроса?
у человека проблема с link и сохранение, я объяснил, как сохранить и почему не работает
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопросы

Сообщение zelenin »

anton44eg писал(а):
zelenin писал(а): а что я ответил также как и вы вне контекста вопроса?
у человека проблема с link и сохранение, я объяснил, как сохранить и почему не работает
как мы видим из кода, save(false) автору уже знакомо. Вопрос заключался как правильно линковать модели, а не как сохранить две модели.
karpo518
Сообщения: 120
Зарегистрирован: 2012.08.30, 20:05
Контактная информация:

Re: Вопросы

Сообщение karpo518 »

2. Извиняюсь, не уточнил. Имелась ввиду возможность генерации верстки формы из скелета в виде массива.
3. Почитал примеры. Разобрался. Линковать можно только к сохраненной модели. Сохранять привязываемую модель не требуется. Код короток и ясен:

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

            $seo->save(false);
            $seo->link('item', $item);
Ответить