Доброе утро
столкнулся с ситуацией в моделях в ModelQuery в init() прописаны параметры для инициализации и часто встречаются
в некоторых запросах требуется отключить init()
подскажите, есть ли какая-то возможно при использовании find или findOne отключить init() в ModelQuery ?
ModelQuery отключить init при использовании find\finOne
-
- Сообщения: 237
- Зарегистрирован: 2018.05.10, 08:26
Re: ModelQuery отключить init при использовании find\finOne
init отключить нельзя, но если там условие where, то его можно сбросить(вместо ->andWhere() использовать ->where())
если там какие-то другие параметры, то нужно смотреть. покажите, что там в init
если там какие-то другие параметры, то нужно смотреть. покажите, что там в init
-
- Сообщения: 237
- Зарегистрирован: 2018.05.10, 08:26
Re: ModelQuery отключить init при использовании find\finOne
ModelQUery:
Код: Выделить всё
public function init()
{
parent::init(); // TODO: Change the autogenerated stub
if(aIfHideMarkdel()){
$this->andWhere(['m_rolls__roll.markdel_by' => null]);
}
}
Код: Выделить всё
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]);
}
}
}
Re: ModelQuery отключить init при использовании find\finOne
ну в данном случае можно просто использовать ModelQUery::find()->where() вместо andWhere и условие из init сбросится
Re: ModelQuery отключить init при использовании find\finOne
Вам надо не 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();
}