Как установить значение кастомноего поля в модели при ее инициализации?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
webgrig
Сообщения: 163
Зарегистрирован: 2015.10.29, 21:34

Как установить значение кастомноего поля в модели при ее инициализации?

Сообщение webgrig »

У меня в модели прописаны связи с другими таблицами
Мне нужно, что бы при инициализации этой модели я мог обратится к связанной таблице
и на основе сделанной выборки установить значение кастомного поля текущей модели.
пытаюсь сделать так:

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

class Languages extends \yii\db\ActiveRecord
{
	public $_isActive;

	public function init(){
	    parent::init();
	    $inactiveStatusModel = self::find()->joinWith('statuses')
	    	->andFilterWhere(['statuses.status' => 2])
	    	->andFilterWhere(['languages.id' => $this->id])
	    	->one();
	    $this->_isActive = count($inactiveStatusModel)? false: true;
	}
	.......
	.......
	.......
}
или так:

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

class Languages extends \yii\db\ActiveRecord
{
	public $_isActive;

	public function __construct(array $config = []){
	    parent::__construct($config);
	    $inactiveStatusModel = self::find()->joinWith('statuses')
	    	->andFilterWhere(['statuses.status' => 2])
	    	->andFilterWhere(['languages.id' => $this->id])
	    	->one();
	    $this->_isActive = count($inactiveStatusModel) ? false: true;
	}
	.......
	.......
	.......
}
но при загрузке страницы браузер сначала надолго зависает а затем говорит, что:
Страница недоступна
Так как же мне все таки заполнить кастомное поле $_isActive при инициализации модели?

И в чем разница между методами 'init()' и '__construct()'?

И вообще можно ли их использовать в данном случае, если нет то как быть?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Как установить значение кастомноего поля в модели при ее инициализации?

Сообщение urichalex »

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

private $_isActive;
public function getIsActive()
{
	if($this->_isActive === null) {
		$this->_isActive =  static::find()->joinWith('statuses')
	    		->andFilterWhere(['statuses.status' => 2])
	    		->andFilterWhere(['languages.id' => $this->id])
	    		->exist();
	 }
	 return $this->_isActive;
}
...
if($model->getIsActive()) {
	// ...
}
// or
if($model->isActive) {
	// ...
}
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Как установить значение кастомноего поля в модели при ее инициализации?

Сообщение maleks »

__construct не использовать, вместо него init

Насчет вашей задачи, то можно еще в обработчике у события after_find это делать
Yii2 universal module sceleton - for basic and advanced templates
Ответить