activequery и relations

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
andreyrud
Сообщения: 265
Зарегистрирован: 2011.09.26, 14:59

activequery и relations

Сообщение andreyrud »

Как из activequery получить relations как объект activequery?

Есть activequery со связями:

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

 $q = Order::find()
 ->with('product'); 
Есть отношение

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

public function getProduct() { return $this->hasMany(...)->viaTable(...); } 
Это дает мне заказ с заполненными продуктами. А мне нужны просто продукты.

Простое $q->product не срабатывает.
Мне нужны продукты именно в виде activequery, чтобы подать его в ActiveDataProvider().
Из документации по yii\db\ActiveQuery так ничего и не понял...
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: activequery и relations

Сообщение mickgeek »

Доступ к связным данным - прочитать данную часть до конца.
andreyrud
Сообщения: 265
Зарегистрирован: 2011.09.26, 14:59

Re: activequery и relations

Сообщение andreyrud »

mickgeek писал(а):Доступ к связным данным - прочитать данную часть до конца.
Мне не нужен АктивРекорд. Мне нужен АктивКвери. $q->getProduct() ничего не дает как и $q->product.
C добавлением ->all() оба дают все что надо, но это АктивРекорд. Можно пройтись foreach и выковырять все продукты в массив, но тогда придется использовать ArrayDataProvider(). Мне кажется это не лучшим вариантом.
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: activequery и relations

Сообщение Bio man »

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

$q = Order::findOne($id);
$products = $q->getProduct(); // ActiveQuery
 
?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: activequery и relations

Сообщение ElisDN »

Нафиг вам форичи не нужны:

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

$dataProvider = new ActiveDataProvider([
    'query' => $q->getProduct(),
    'pagination' => false,
]);
И выводите в грид.
andreyrud
Сообщения: 265
Зарегистрирован: 2011.09.26, 14:59

Re: activequery и relations

Сообщение andreyrud »

Bio man писал(а):

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

$q = Order::findOne($id);
$products = $q->getProduct(); // ActiveQuery
$q -  ActiveQuery. Соответственно $q->getProduct() - метод не найден. И не понятно как реализовать getProduct(). Все это происходит при наличии OrderQuery.php, сгенеренного gii...
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: activequery и relations

Сообщение Bio man »

Может просто Product::find()? Сформулируйте задачу, тогда и ответ будет точнее.
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: activequery и relations

Сообщение mickgeek »

andreyrud писал(а):Как из activequery получить relations как объект activequery?
Никак. Любой find() генерирует ActiveQuery, а getProduct() содержится в ActiveRecord. Правильно выше подсказали, используйте модель Product для решения своей задачи.
andreyrud
Сообщения: 265
Зарегистрирован: 2011.09.26, 14:59

Re: activequery и relations

Сообщение andreyrud »

Плохо. Я как раз думал обойтись одним запросом, тем более что через ActiveRecord у меня все прекрасно вытягивается...
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: activequery и relations

Сообщение mickgeek »

Почему одним? Как я понимаю, $q идёт в одно место - один запрос, связь - в другое - другой запрос. В сумме две штуки. Посмотрите исходный код метода hasMany().
Ответить