Страница 1 из 1
Жадная загрузка
Добавлено: 2018.07.13, 10:04
Brainfuck
Пытаюсь понять что такое жадная загрузка. С with вроде работает. Но с via никак не выходит...
Например:
Код: Выделить всё
class Article extends ActiveRecord {
public function getPayments() {
return $this->hasMany(ArticlePayment::class, ['article_id' => 'id']);
}
}
class Contest extends ActiveRecord {
public function getArticles() {
return $this->hasMany(Article::class, ['contest_id' => 'id']);
}
}
$contest = Contest::find()->where(['id' => 1])->with('articles')->via('payments')->one();
Выдает ошибку "Call to a member function getRelation() on null". Именно на via (без него, только с with все срабатывает).
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:35
zelenin
Contest::find()-> ... ->via('payments')->one();
у Contest нет payments
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:36
Dominus
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:37
Brainfuck
zelenin писал(а): ↑2018.07.13, 11:35
Contest::find()-> ... ->via('payments')->one();
у Contest нет payments
Но у Article то есть! Я просто не могу понять что вообще делает этот via. Я читал доки, но не понял... Объясните мне пожалуйста простыми словами.
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:39
Brainfuck
И еще один момент
Код: Выделить всё
/**
* @property-read User $user
*/
class Article extends ActiveRecord {
public function getUser() {
return $this->hasOne(User::class, ['id' => 'user_id']);
}
}
Я год писал на Yii2 и только что обнаружил что если вот так указывать геттер на связь то автоматически генерируется пропертя. Причем даже безо всяких with. Это поведение где-то описано? Почему я об этом ничего не знал...
Это здорово все упрощает!
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:41
Dominus
Brainfuck писал(а): ↑2018.07.13, 11:37
Но у Article то есть! Я просто не могу понять что вообще делает этот via. Я читал доки, но не понял... Объясните мне пожалуйста простыми словами.
https://github.com/yiisoft/yii2/blob/ma ... %86%D1%8B-
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:42
zelenin
Brainfuck писал(а): ↑2018.07.13, 11:37
zelenin писал(а): ↑2018.07.13, 11:35
Contest::find()-> ... ->via('payments')->one();
у Contest нет payments
Но у Article то есть! Я просто не могу понять что вообще делает этот via. Я читал доки, но не понял... Объясните мне пожалуйста простыми словами.
https://github.com/yiisoft/yii2/blob/ma ... %86%D1%8B-
тут вроде понятно изложено. это связь через промежуточную таблицу
order => order_item => item в order можно получить items через/via order_items(order_id, item_id)
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:42
Brainfuck
Это дублированные доки на русском языке. Я их уже читал. Упорно не понимаю как работает via. Даже после 10 раз прочтения доков... У меня она не работает никак...
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:46
zelenin
Brainfuck писал(а): ↑2018.07.13, 11:39
И еще один момент
Код: Выделить всё
/**
* @property-read User $user
*/
class Article extends ActiveRecord {
public function getUser() {
return $this->hasOne(User::class, ['id' => 'user_id']);
}
}
Я год писал на Yii2 и только что обнаружил что если вот так указывать геттер на связь то автоматически генерируется пропертя. Причем даже безо всяких with. Это поведение где-то описано? Почему я об этом ничего не знал...
Это здорово все упрощает!
для каждой связи model::getSomething() существует model->something
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:48
Brainfuck
zelenin писал(а): ↑2018.07.13, 11:42
Brainfuck писал(а): ↑2018.07.13, 11:37
zelenin писал(а): ↑2018.07.13, 11:35
Contest::find()-> ... ->via('payments')->one();
у Contest нет payments
Но у Article то есть! Я просто не могу понять что вообще делает этот via. Я читал доки, но не понял... Объясните мне пожалуйста простыми словами.
https://github.com/yiisoft/yii2/blob/ma ... %86%D1%8B-
тут вроде понятно изложено. это связь через промежуточную таблицу
order => order_item => item в order можно получить items через/via order_items(order_id, item_id)
Ооо кажется дошло. Я почему-то не замечал раньше эту надпись про промежуточную таблицу.
Значит via это исключительно для промежуточных таблиц? Т.е. связь многие ко многим?
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:50
zelenin
Brainfuck писал(а): ↑2018.07.13, 11:48
zelenin писал(а): ↑2018.07.13, 11:42
Brainfuck писал(а): ↑2018.07.13, 11:37
Но у Article то есть! Я просто не могу понять что вообще делает этот via. Я читал доки, но не понял... Объясните мне пожалуйста простыми словами.
https://github.com/yiisoft/yii2/blob/ma ... %86%D1%8B-
тут вроде понятно изложено. это связь через промежуточную таблицу
order => order_item => item в order можно получить items через/via order_items(order_id, item_id)
Ооо кажется дошло. Я почему-то не замечал раньше эту надпись про промежуточную таблицу.
Значит via это исключительно для промежуточных таблиц? Т.е. связь многие ко многим?
да
Re: Жадная загрузка
Добавлено: 2018.07.13, 11:58
Brainfuck
Тогда все. Спасибо. Разобрался. Меня кто-то спутал сказав что via это тоже связано с жадной загрузкой. А это всего лишь связь многие ко многим.