Отключение Behavior до выборки данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
mpak59rus
Сообщения: 8
Зарегистрирован: 2012.11.05, 09:56

Отключение Behavior до выборки данных

Сообщение mpak59rus »

Всем хорошего дня.
Подскажите, как можно отключить частично (или все) behaviors, еще до выборки данных через ActiveRecord?
Есть у меня модель Restaurant, в которой я добавляю достаточно много behaviors. Часть отрабатывает AFTER_FIND. И все отрабатывают, с этим проблем нет. Но вот в некоторых случаях, мне не нужно, что бы они отрабатывали. Т.е. к примеру выбирая список ресторанов для выбора из выпадающего списка, мне нужно минимум информации, голые данные из БД, без применения behaviors. Что-то в духе Restaurant::find()->select(['id', 'title', 'slug'])->where(['status' => Restaurant::STATUS_PUBLISHED])->all();
Получается, что мне нужно применить ->detachBehaviors();, но еще до выборки данных. Нашел что-то подобное здесь - Dynamic Detach - https://gist.github.com/nadar/ae6aeefca ... 35a718cb28 , примерно это мне и нужно, но я не понимаю откуда берется метод ->bind(['unserialize' => false]). Мне нужно его добавить в ActiveRecord?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Отключение Behavior до выборки данных

Сообщение Nex-Otaku »

Не надо весь этот ужас.

Сделайте новую чистую модель без бихевиоров чисто для чтения. И в неё читайте.

Либо напрямую можно выбрать данные как массив.
Аватара пользователя
mpak59rus
Сообщения: 8
Зарегистрирован: 2012.11.05, 09:56

Re: Отключение Behavior до выборки данных

Сообщение mpak59rus »

Nex-Otaku писал(а): 2017.09.05, 19:25 Не надо весь этот ужас.

Сделайте новую чистую модель без бихевиоров чисто для чтения. И в неё читайте.
Мне кажется это излишнее добавление сущностей. Да, в принципе - это решение, но не проще обойтись одной моделью и отключать по мере надобности, что не нужно? Или просто такой возможности в Yii не предусмотрено и это будет костылем?
Nex-Otaku писал(а): 2017.09.05, 19:25 Либо напрямую можно выбрать данные как массив.
Напрямую это как? Можете привести пример кода?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Отключение Behavior до выборки данных

Сообщение ElisDN »

mpak59rus писал(а): 2017.09.06, 12:32 Напрямую это как? Можете привести пример кода?
Через ->asArray()->all() вместо ->all()
Ответить