@Winter_Silence

Как в Yii2 связать две модели по нескольким полям?

Приветствую!
Есть две таблицы, к которых есть поля type_id, min, max.
Нужно их связать так:
SELECT * FROM `tbl1` LEFT JOIN `tbl2` ON (`tbl1`.`type_id` = `tbl2`.`type_id`) AND ((tbl2.min >= tbl1.min) AND (tbl2.max <= tbl1.max)) WHERE `tbl1`.`id`='1'


Для этого написал примерно такую связь:
public function getTbl2()
	{
		return $this->hasMany(Tbl2::class, ['type_id' => 'type_id'])
			->andOnCondition(Tbl2::tableName() . '.min >= ' . self::tableName() . '.min')
			->andOnCondition(Tbl2::tableName() . '.max <= ' . self::tableName() . '.max');
    }


При попытке вывести значение из tbl2 так:
$t = Tbl1::find()->byPk($id)->joinWith('tbl2')->one();
var_dump($t->tbl2);

Получаю такую ошибку:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tbl1.min' in 'where clause'
The SQL being executed was: SELECT * FROM `tbl2` WHERE (`type_id`=1) AND ((tbl2.min>= tbl1.min) AND (tbl2.max <= tbl1.max))
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
@sidni
return $this->hasMany(Tbl1::class, ['type_id' => 'type_id'])

подозрительно выглядит может всетаки Tbl2::class
или так Вы пытаетесь заджнойнить самого себя?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Max.Credit Санкт-Петербург
от 150 000 до 150 000 руб.
Willz Москва
от 150 000 руб.
Fmedia Санкт-Петербург
от 40 000 до 100 000 руб.
15 авг. 2018, в 01:47
30000 руб./за проект
15 авг. 2018, в 01:09
70000 руб./в месяц
14 авг. 2018, в 22:43
350 руб./за проект