Yii2 ActiveRecord — как создать связь через две таблицы?

В базе есть последовательно связанные таблицы:
a(id, name)
b(id, a_id, name)
c(id, b_id, name)
d(id, c_id, data)
Для каждой создана AR со связями
class D extends ActiveRecord
{
    public function getC()
    {
        return $this->hasOne(C::className(), ['id' => 'c_id']);
    }
    public function getB()
    {
        return $this->hasOne(B::className(), ['id' => 'b_id'])
            ->via('c');
    }
    public function getA()
    {
        return $this->hasOne(A::className(), ['id' => 'a_id'])
            ->via('b');
    }
}

И в контроллере:
$arrData = D::find()
    ->joinWith([
        'c',
        'b',
        'a'
    ])
    ->asArray()
    ->one();

arrData содержит только данные из таблиц `b`, `c` и `d`. Как получить данные из `a`?

P.S. На гитхабе есть открытая issue, решения нет.
  • Вопрос задан
  • 2735 просмотров
Пригласить эксперта
Ответы на вопрос 1
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
Я не совсем понял вопрос.
Что мешает сделать выборку из a?

use \app\model\a; //a - это наследуемый класс от activeRecord
use \app\model\b; // b - тоже

$id = 21 // известная величина, к примеру, b_id

$bdb = b::findOne(['b_id' => $id]);
$adb = a::findOne(['id' => $bdb->id]);
echo $adb->name

Вот статья из документации по работе с БД в yii2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы