Companies : id, name
Contracts : id, id_company
Acts: id, id_contract
Acts связан c Companies через Contracts.
Соответственно в модели Companies
Код: Выделить всё
public function getContracts()
{
return $this->hasMany(Contracts::className(), ['id_company' => 'id']);
}
В модели Contracts
Код: Выделить всё
public function getCompanies()
{
return $this->hasOne(Companies::className(), ['id' => 'id_company']);
}
Код: Выделить всё
SELECT `companies`.* FROM `companies`
LEFT JOIN `contracts` ON `companies`.`id` = `contracts`.`id_company`
LEFT JOIN `acts` ON `contracts`.`id` = `acts`.`id_contract` WHERE (contracts.id_company = companies.id) AND (acts.id_contract = contracts.id)
Пыталась неудачно так
Код: Выделить всё
public function getCompanies()
{
$query = hasOne(Companies::className()); // Вот в этом месте туплю!!!
$query->joinWith(['contracts' => function ($q) {
$q->where(['contracts.id_company' => 'companies.id']);
$q->joinWith(['acts' => function ($qi) {
$qi->where(['acts.id_contract' => 'contracts.id']);
}]);
}]);
получать из модели данные о компании типа $model->Companies->name, если в модели Acts будет метод:
Код: Выделить всё
public function getCompaniesName() {
return $this->Companies->name;
}