Niko
Эти названия полей для примера, на самом деле там другое, но суть та же
Айбулат
Валидация срабатывает, работает как нужно, но сообщения нет
а поле для сообщения ошибки присутствует?
Niko
да. post_id есть. Я нашел примечание одно в мануале http://joxi.ru/82QjOadt14jndA
Niko
Сейчас попробую и вернусь
Niko
[['posts'], function ($attribute, $params, $validator) { foreach ($this->{$attribute} as $post) { if ($post->user_id === $this->post->user_id) { $validator->addError($this->post, $attribute, 'Один пост у двух юзеров!!!'); } }; }]; Так тоже не работает Что я делаю не так? Кто-нибудь делал кастомные валидаторы?
Niko
@aibulatik я использую ActiveForm, поле должно само появляться
Айбулат
@aibulatik я использую ActiveForm, поле должно само появляться
если ты шаблон поля не изменял, то да
Niko
не изменял
Borys
Подскажите пожалуйста по поиску many-to-many. Есть три таблицы: 1. articles 2. tag 3. tag_articles (id|article_id|tag_id) В articles есть связь: public function getTagArticles() { return $this->hasMany(TagArticle::class, ['article_id' => 'id']); } public function getCurrentTags() { return $this->hasMany(Tag::class, ['id' => 'tag_id']) ->via('tagArticles'); } И $model->currentTags отдает модели тегов назначенных для article. Есть дефолтная ArticleSearch и я никак не могу понять что в нее добавлять для фильтрации articles по тегам.
Borys
Что-бы получать все articles с tag_id 5 например.
Ivan
Что-бы получать все articles с tag_id 5 например.
Вот тут посмотри, ниже синей плашки http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#lazy-eager-loading
Borys
Ниже Info: In general, when eagerly loading N relations among which M relations are defined with a junction table, a total number of N+M+1 SQL statements will be executed. Note that a nested relation a.b.c.d counts as 4 relations.?
Ivan
В чём вопрос?
Borys
ниже синей плашки Скинул выше текст синей плашки. На правильную смотрю?
Ivan
Сделай по ctrl+F поиск по странице $query->andWhere(['status' => Order::STATUS_ACTIVE]);
Borys
Прочел, не совсем понимаю как это применить в search модели.
Borys
Вот так работает, это норм? if (!empty($this->searchTag)) { $query->joinWith('tagArticles')->where(['tag_id' => $this->searchTag]); }
Borys
Или можно как-то еще проще и понятнее сделать?
Karim
filterwhere
Borys
Не понял, можно подробнее?
Karim
вместо If empty юзать. $query->joinWith('tagArticles')->filterWhere(['tag_id' => $this->searchTag]); Но пропускать будет только если $this->searchTag === Null, если не ошибаюсь
Borys
работает
Borys
в итоге моя связь public function getCurrentTags() { return $this->hasMany(Tag::class, ['id' => 'tag_id']) ->via('tagArticles'); } и не нужна при этом поиске?
Borys
Бгг)
Borys
только что выше этот вопрос спрашивал
Alex
ну создаешь форму с полем каттегории и ручками дописываешь в search() (ну или как ты обзываешь метод у себя) фильтр по полю
Alex
ща покажу
Alex
дай шторму запустить)
Borys
http://joxi.ru/a2XWEL7Cy4BkBm?d=1
Borys
Что-то типо тебе надо?
Alex
[ 'attribute' => 'projectManager', 'value' => 'projectManager.shortName', 'filter' => \app\models\User::getDataList(false, \app\models\enums\UserTypes::PROJECT_MANAGER) ],
Alex
getDataList возвращает массив
Borys
[ 'attribute' => 'searchTag', 'filter' => $tags, ], где $tags массив ['id' => 'name']
Alex
там длинный кусок)
Alex
эта часть идет вместо 'category.name',
Valentin
Заполнить attribute в колонке
Valentin
Пример дали выше готовый
Borys
В rules твоей $searchModel должен быть указан атрибут
Borys
http://yiiframework.domain-na.me/doc/guide/2.0/ru/input-validation#declaring-rules
Borys
Теперь еще раз посмотри какой атрибут указан у тебя в GridView
Borys
Borys
Borys
Доку почитай :)
Borys
Павел
Ща мы игнор включим и выключим только за коньяк
Ivan
))))))
Borys
Где же?
Borys
Дмитрий
Где же?
Наверное в типичном сичадмине
Borys
Это где такое?
Дмитрий
Borys
Кинь линк щито энто и хде я там
Дмитрий
Я написал "наверное"
The Ant
блять
The Ant
как мне задать условие в запросе с IS NULL ?
The Ant
$query->andFilterWhere([ 'is', '`s`.`site_id`', null ]);
The Ant
не работает нихуя
Alex
не матерись)
Alex
у нас тут есть девочки)
The Ant
да сил нет уже
The Ant
какая-нибудь нестандартная выборка и начинаются танцы пляски
Alex
rcnf
Alex
кста
Alex
`` кавычки не обязательным вэтом случае
Alex
юии сам заэкранирует
The Ant
привычка
The Ant
ну и как сделать то ) все возможные варианты испробовал
The Ant
неужели весь трехэтажный кусок переписывать на текстовый запрос из-за этой хуйни?
Alex
эмм
Alex
а зачем фильтр то?
Alex
$q->andWhere(['is', '`s`.`site_id`', null])
Alex
и все
Ivan
$query->andFilterWhere([ 'is', '`s`.`site_id`', null ]);
Подозреваю, что filter при параметрре null не работает, это именно то, для чего сделан Filter. Чтобы он не работал на null
The Ant
да ;[ догнал тока щас
Karim
в итоге моя связь public function getCurrentTags() { return $this->hasMany(Tag::class, ['id' => 'tag_id']) ->via('tagArticles'); } и не нужна при этом поиске?
тут да. Если бы проводил фильтрацию по какому то полю из таблицы tag, то использовал бы эту связь.
Konstantin
кстати, ->andWhere(['s.site_id' => null]) тоже работает
who are you
кстати, ->andWhere(['s.site_id' => null]) тоже работает
я бы так наверное делал, ка кто логичнее смотрится
Alex
а меня может немного сбить с толку
Vadim
В phpstorm можно как-то найти все незакомменченные print_r, echo и т.п.?