@Arock

Как в Yii2 работать с последовательно связанными таблицами используя ActiveRecord?

Прошу помощи по Yii2 и ActiveRecord.

Уже несколько дней пытаюсь разобраться как работать с несколькими последовательно связными таблицами используя ActiveRecord в Yii2.
Таблицы:
department
id
value

building
id
value
department_id (внешний ключ)

room
id
value
building_id (внешний ключ)

Вот рабочий SQL код:

SELECT department.value, room.id, room.value
FROM department
LEFT JOIN building ON department.id=building.department_id
LEFT JOIN room ON building.id=room.building_id
WHERE department.id = 7


Как реализовать это с помощью ActiveRecord?
P. S.
Если нужно джойнить одну таблицу - то все просто.
  • Вопрос задан
  • 1063 просмотра
Решения вопроса 1
igorbelikov
@igorbelikov
Fullstack Developer
Используйте Gii генератор и он все сделает за вас.

Модель Department.
class Department extends \yii\db\ActiveRecord {
  /**
   * @return \yii\db\ActiveQuery
   */
  public function getBuildings() {
    return $this->hasMany(Building::className(), ['department_id' => 'id']);
  }
  // ...
}

Может получать:
var_dump($department->buildings);

Модель Building.
class Building extends \yii\db\ActiveRecord {
  /**
   * @return \yii\db\ActiveQuery
   */
  public function getDepartment() {
    return $this->hasOne(Department::className(), ['id' => 'department_id']);
  }
  /**
   * @return \yii\db\ActiveQuery
   */
  public function getRooms() {
    return $this->hasMany(Room::className(), ['building_id' => 'id']);
  }
  // ...
}

Может получать:
var_dump($building->department);
var_dump($building->rooms);


Модель Room.
class Room extends \yii\db\ActiveRecord {
  /**
   * @return \yii\db\ActiveQuery
   */
  public function getBuilding() {
    return $this->hasOne(Building::className(), ['id' => 'building_id']);
  }
  // ...
}

Может получать:
var_dump($room->building);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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