Yii2

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
		))
	)
);

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

yii2 ajax Bad Request (#400): Unable to verify your data submission. -- Сразу для ajax всех запросов

Для решени проблемы типа (ещё мы уже обсуждали):

Ошибка Bad Request (#400): Unable to verify your data submission. (Не удалось проверить проверить переданные данные

При использовании jquery и при условии того, что js подключается после html view, можно применять следующий приём --

в HTML

в представление (view) добавить определение такой JS переменной:

yii2 mongodb Добавить элемент (документ) в подмассив не перезаписывая его целиком -- $push

Как-то так:

$collection = Yii::$app->mongodb->getCollection($collectionName);

$commentData = Yii::$app->request->post('Comment');

$collection->update(
	array("_id" => new ObjectID(Yii::$app->request->post('report-id'))), 
	array('$push' => array("_comments" => 
		array (
			'elem_id' => $commentData['elem_id'],
			'text' => $commentData['text'],
			'create_timestamp' => (new \DateTime())->getTimestamp()
		))
	)
);

где _comments -- имя подмассива в документе

yii2 ошибка при установке. Your requirements could not be resolved to an installable set of packages.

Пытаюсь установить yii2 с помощью команды:

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

Ответ:

Installing yiisoft/yii2-app-basic (2.0.12)
  - Installing yiisoft/yii2-app-basic (2.0.12): Downloading (100%)         
Created project in basic
Loading composer repositories with package information
Updating dependencies (including require-dev)

А затем ошибка:

yii2 ->load() и ->attrubutes = ... -- Какая разница при загрузке значений, данных в ActiveRecord, Model

Что делает вызов $model->load()

load() пытается найти в переданном массива подмассив, который имеет имя. которое доложно быть у "формы" модели -- обычно это имя самой модели.

Что делает вызов $model->attributes =...

Присваивание же методом вроде:

yii2 Загрузка модели ActiveRecord из подмассива POST (или произвольного ассоцитивного массива)

В этом случае работают $comment->attribute:

if (!(($comment->attributes = Yii::$app->request->post('Comment')) 
&& $comment->validate()))
  {
       throw new UnprocessableEntityHttpException(
           'Некорректные данные комментария:' . print_r($comment->getErrors(), true));
  } 

Если, же вы хотите использовать load(), то передавайте подмассив.

yii2 Setting unknown property Model -- как исправить ошибку

Exception (Unknown Property) ;yii\base\UnknownPropertyException; with message ;Setting unknown property: ....

Если вы используете consultnn\embedded\EmbeddedDocument или вообще любую структуру, уснаследованную не от AcitveRecord а от Model, то приходится помимо массива из attributes() в модели создавать ещё и поля класса:

то есть писать как-то так:

Yii2 CamelCase в именах папок, директорий контроллеров -- (Большие, загланые буквы) -- не работают, (нижнее подчеркивание)

Обнаружил, что с заглавными буквыми в подпапках контроллеров получаем ошибку 404.
А потому вместо CameCase-а приходится использовать нижнее подчеркивание в имени папки, и в пронстрансве имен контроллера:

namespace app\controllers\es\report_chat;

/**
 * Контроллер-обработчик запросов чата 
 */
class AjaxChatController extends Controller
{

-- то есть папка должно быть с имененм:
report_chat

тогда всё загружается нормально.

То есть обратиться к действию данного контроллера можно по URL-у вроде:

yii2 MongoIdValidator Как конвертировать в объект или строку

Например так в объект:

    public function rules()
    {
        
        return [
            
            ['foiv_id', MongoIdValidator::className(), 'forceFormat' => 'object'],

А если нужно в строку, то так:

'forceFormat' => 'string'

yii2 mongodb hasmany Как организовать связь

делай поле, котрое будет внешним ключом, массивом

Просто указываем поле, в котором лежит список вложенных id как поле связи.

Pages

Subscribe to RSS - Yii2