embedded

yii2 Вложенные множественные модели (sql) на одной форме как с ними работать

Про mongodb мы уже говорили, теперь посмотрим какие варианты у нас есть для sql (напр. mysql)

Частично о множественных моделях на форме говорит и официальная документация, но это не совсем то, что нам надо.

Проблемы реализации:

Как именно формировать атрибут name во вложенном списке моделей (например список Фотографий в Альбоме) - с этим же тесно связана проблема возврата ошибки.

yii2 mongodb pull -- Удалить документ из подмассива (не перезаписывая целиком) -- вложенные документы

Выясняем как сделать операцию обратную $push.

Вот так должно работать:

$result = $collection->update(
	array("_id" => new ObjectID(Yii::$app->request->post('report-id'))), 
	array('$pull' => array("_comments" => 
		array (
			'user_id' => new ObjectID($user_id),
			'text' => $text,
			'create_timestamp' => (int) $create_timestamp
		))
	)
);

А вот запрос на ту же тему (но только выборка по одному полю) не посредственно к монге в командной строке:

yii2tech Value should either an object or a null, 'array' given.

--такой вот косяк.

Решается в общем случае подключением поля с помощью метода mapEmbeddedList().
Подробности решения сообщим тут позже.

-- тут такой момент: mapEmbeddedList() создаёт ArrayObject -- но его приходится вручную "набивать" из пришедших от формы данных, а также не слишком ясно как сделать нормальную валидацию вложенной модели на форме.

Поэтому я рекомендую использовать для вложенных документов mongodb расширение consultnn/yii2-mongodb-embedded .

yii2 has no declaration for the embedded -- Ошибка (валидация) Решение

ПРИМЕЧАНИЕ: для работы со вложенными документами намного удобнее оказывается использовать consultnn/yii2-mongodb-embedded.

В моём случае ошибка выглядела как-то так:

'app\models\es\PrimaryReport' has no declaration ('embedresearch_results()') for the embedded 'research_results'

Причина в том, что если у вас есть метод, описывающий вложенную сущность:

$config для конструктора объекта, создаваемого в yii2tech/embedded

В конструкторе класса вложенного документа необходимо указать среди аргументов $config и передать его в конструктор родительского класса. Иначе объект создаваться не будет, по крайней мере, методами из yii2tech/embedded. Объекты создаются по данным, переданным в этом массиве.

Subscribe to RSS - embedded