yii2 leftjoin построитель запросов - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть отношение / иерархия между Пользователем и Персоналом: Персонал всегда является Пользователем, но Пользователь также может быть Студентом или Администратором.Теперь через запрос я хочу получить только записи о сотрудниках, для которых поле is_disabled в User равно false.Я попробовал следующее, но выдает ошибку:

Персонал не имеет поля is_disabled

Это правда, это поле только в таблице пользователей.

Пользователь

 * @property int $id
 * @property string $username
 * @property string password

Персонал

 * @property int $id
 * @property string $cellphone
 * @property string $phone
 * @property string $link
 * @property User $id0

SearchStaff

public function search($params)
{
    $query = Staff::find()
    ->leftJoin('user', '`user`.`id` = `staff`.`id`')
    ->where(['user.is_disabled' => false);
}

1 Ответ

0 голосов
/ 05 февраля 2019

Соединение неверно, внешний ключ должен быть id0.

public function search($params)
{
    $query = Staff::find()
    ->leftJoin('user', 'user.id = staff.id0')
    ->where(['user.is_disabled' => false);
}

Вы также можете создать отношение в модели Staff:

public function getUser(){
    return $this->hasOne(User::className(), ['id' => 'id0']);
}

И отредактировать запрос:

$query = Staff::find()
  ->joinWith('user')
  ->where(['user.is_disabled' => false)];
...