ActiveRecord и behavior

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Singrana
Сообщения: 38
Зарегистрирован: 2013.03.20, 16:43

ActiveRecord и behavior

Сообщение Singrana »

Подскажите: как теперь реализовать такую конструкцию:

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

$this->owner->findAll($criteria))
 
Суть в том: что в документации приведtно типа

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

$customers = Customer::find()->....
 
То есть статический вызов модели. А если это поведение, и мне нужно работать с текущей моделью, которая в $this->owner?
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: ActiveRecord и behavior

Сообщение lancedevnull »

$owner = $this->owner;
$owner::findAll()
Аватара пользователя
Singrana
Сообщения: 38
Зарегистрирован: 2013.03.20, 16:43

Re: ActiveRecord и behavior

Сообщение Singrana »

Спасибо, проканало. Сам ступил :(
Аватара пользователя
Singrana
Сообщения: 38
Зарегистрирован: 2013.03.20, 16:43

Re: ActiveRecord и behavior

Сообщение Singrana »

И вопрос - а как красивее реализовать такого плана конструкции:

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

$model=$this->owner;
$model=$model::find();

$model=$model->andWhere('LENGTH(' . $this->fieldKey . ') = '.(strlen($this->oldKey) + 3).' AND SUBSTRING(' . $this->fieldKey . ', 1, ' . strlen($this->oldKey) . ') = '.$this->oldKey);

if($this->fieldParent)
{
    $model=$model->andWhere([$this->fieldParent => $this->owner->{$this->fieldParent}]);
}

if ($list = $model->all())
....
 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ActiveRecord и behavior

Сообщение zelenin »

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

$query = $this->owner::find();
$query->andWhere('LENGTH(' . $this->fieldKey . ') = '.(strlen($this->oldKey) + 3).' AND SUBSTRING(' . $this->fieldKey . ', 1, ' . strlen($this->oldKey) . ') = '.$this->oldKey);

if($this->fieldParent)
{
   $query->andWhere([$this->fieldParent => $this->owner->{$this->fieldParent}]);
}

if ($list = $query->all())
...

 
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: ActiveRecord и behavior

Сообщение lancedevnull »

$this->owner::find(); и $this->owner->{$this->fieldParent}
сомневаюсь что будут работать
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: ActiveRecord и behavior

Сообщение lancedevnull »

а красивее делать через параметры, т.е. 'column = :value' а уже потом передавать 'value' => $value
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ActiveRecord и behavior

Сообщение zelenin »

lancedevnull писал(а):$this->owner::find(); и $this->owner->{$this->fieldParent}
сомневаюсь что будут работать
почему не будет? так и работают поведения. или я не понял вас.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ActiveRecord и behavior

Сообщение zelenin »

lancedevnull писал(а):а красивее делать через параметры, т.е. 'column = :value' а уже потом передавать 'value' => $value
а это да, правда тут необязательно, т.к. данные не от пользователя приходят, но тем не менее как праивло хорошего тона стоит принять.
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: ActiveRecord и behavior

Сообщение lancedevnull »

я имел ввиду такая запись, надо через временные переменные кажысь
$owner = $this->owner; $owner::static()
и
$attribute = $this->fieldParent; $this->owner->{$fieldParent};
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ActiveRecord и behavior

Сообщение zelenin »

lancedevnull писал(а):я имел ввиду такая запись, надо через временные переменные кажысь
$owner = $this->owner; $owner::static()
и
$attribute = $this->fieldParent; $this->owner->{$fieldParent};
зачем в переменные пихать то, что уже в переменных (атрибутах поведения)? так будет работать.
Аватара пользователя
Singrana
Сообщения: 38
Зарегистрирован: 2013.03.20, 16:43

Re: ActiveRecord и behavior

Сообщение Singrana »

$this->owner->{$this->fieldParent} такая запись замечательно работает
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: ActiveRecord и behavior

Сообщение lynicidn »

lancedevnull писал(а):я имел ввиду такая запись, надо через временные переменные кажысь
$owner = $this->owner; $owner::static()
и
$attribute = $this->fieldParent; $this->owner->{$fieldParent};
Изображение
Ответить