ModelQuery отключить init при использовании find\finOne

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 236
Зарегистрирован: 2018.05.10, 08:26

ModelQuery отключить init при использовании find\finOne

Сообщение iamguruman »

Доброе утро

столкнулся с ситуацией в моделях в ModelQuery в init() прописаны параметры для инициализации и часто встречаются
в некоторых запросах требуется отключить init()

подскажите, есть ли какая-то возможно при использовании find или findOne отключить init() в ModelQuery ?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: ModelQuery отключить init при использовании find\finOne

Сообщение rak »

init отключить нельзя, но если там условие where, то его можно сбросить(вместо ->andWhere() использовать ->where())
если там какие-то другие параметры, то нужно смотреть. покажите, что там в init
iamguruman
Сообщения: 236
Зарегистрирован: 2018.05.10, 08:26

Re: ModelQuery отключить init при использовании find\finOne

Сообщение iamguruman »

rak писал(а): 2021.07.11, 13:14 init отключить нельзя, но если там условие where, то его можно сбросить(вместо ->andWhere() использовать ->where())
если там какие-то другие параметры, то нужно смотреть. покажите, что там в init
ModelQUery:

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

public function init()
    {
        parent::init(); // TODO: Change the autogenerated stub

        if(aIfHideMarkdel()){
            $this->andWhere(['m_rolls__roll.markdel_by' => null]);
        }
    }
aIfHideMarkdel():

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

function aIfHideMarkdel(){
    if(!Yii::$app->user->isGuest){
        if (Yii::$app->user->identity->deleted_visibility == '1') {
            //$msg_deleted = 'Удаленные отображаются сейчас';

            return false;

        } elseif (Yii::$app->user->identity->deleted_visibility == '0') {
            return true;
            //$msg_deleted = 'Удаленные сейчас скрыты от просмотра';
            //$this->andWhere(['m_merchantdata__berito.markdel_by' => null]);
        }
    }
}
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: ModelQuery отключить init при использовании find\finOne

Сообщение rak »

ну в данном случае можно просто использовать ModelQUery::find()->where() вместо andWhere и условие из init сбросится
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: ModelQuery отключить init при использовании find\finOne

Сообщение SiZE »

Вам надо не init отключать а логику переписывать. Можно так

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

class ModelQuery extends ActiveQuery
{
    public function markDelByEqNull(bool $addCondition = false)
    {
    	if ($addCondition) {
	   return $this->andWhere(['m_rolls__roll.markdel_by' => null]);
	}
	
	return $this;
    }
}

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

public function actionTest()
{
    $data = Model::find()->markDelByEqNull(!Yii::$app->user->isGuest && !Yii::$app->user->identity->deleted_visibility)->findAll();
}
Ответить