activerecord hasmany получить элемент из списка по условию

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

activerecord hasmany получить элемент из списка по условию

Сообщение iamguruman »

в модели Supplier (extended ActiveRecord) есть метод:

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

/* @property Jps[] $jps */
    public function getJps(){
        $this->hasMany(Jp::className(), ['supplier_id' => 'id']);
    }
как я могу обратиться к элементу из массива?
сейчас я перебираю список через foreach, не удобно, может быть можно как-то вот так?..

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

           
                $model->jp_selled_id = $model->supplier->jps [как обратиться к элементу из jps?]->id

unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: activerecord hasmany получить элемент из списка по условию

Сообщение unknownby »

При данном вызове

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

$model->supplier->jps
У тебя возвращается массив объектов с которым ты работаешь потом через foreach.
Разница между hasMany и hasOne в том, что один возвращает массив объектов, а другой конкретный объект.
Можно вернуть один объект используя условие твоё и передавая внутрь GET-а условие, например ТИП Jp.

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

public function getJpByType($type){
        $this->hasOne(Jp::className(), ['supplier_id' => 'id'])
        	->where(['type_id' => $type]);
}
Вызов

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

$type = 1; //твой тип
$jp = $model->supplier->getJpByType($type);
$jp->name;
Не зная конкретной задачи не подсказать толком :)
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: activerecord hasmany получить элемент из списка по условию

Сообщение iamguruman »

задача... просто без форича забрать элемент 0, например, как то так:

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

$model->jp_selled_id = $model->supplier->jps[0]->id
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: activerecord hasmany получить элемент из списка по условию

Сообщение unknownby »

Ну как-то так и заберёт нулевой элемент массива, а у этого объекта заберёт уже id
А разницы нет, какой элемент забираться будет? Тогда пропиши hasOne и не нужно квадратных скобок
Ответить