webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg

Как сделать связь hasMany по двум параметрам?

есть 2 таблицы:
user (стандартная для yii advanced), id + другие поля
user_relations в которой id(PK), user_id, invite_id, type
необходимо сделать связь которая выберет все user_relations, где или user_id или invite_id равны user->id
пробую так:
public function getFriendsList(){
        return $this->hasMany(UserRelation::className(),['user_id'=>'id'])->orWhere(['invite_id'=>$this->id]);
    }

ошибок нет, но выборка пустая. Лезу в дебаг и вижу, что мое orWhere превратилось в AND:
SELECT * FROM `user_relation` WHERE (`invite_id`=1) AND (`user_id`=1)

Я приболел или yii?

еще пробовал так:
public function getFriendsList(){
        return $this->hasMany(UserRalation::className(),['user_id'=>'id'])->orOnCondition(['invite_id'=>'id']);
    }

результат идентичный
  • Вопрос задан
  • 494 просмотра
Пригласить эксперта
Ответы на вопрос 2
VGrabko
@VGrabko
Golang, Php, Js
В данный момент по моему проблема в yii. Заюзайте пока что query builder
Ответ написан
kimono
@kimono
Web developer
https://github.com/yiisoft/yii2/blob/master/framew...
Попробуйте так:
public function getFriendsList(){
  return $this->hasMany(UserRelation::className(),['user_id'=>'id'])->where(['or', ['user_id' => $this->id],['invite_id'=>$this->id]);
}

А вообще уместнее будет:
public function getFriendsList(){
  return UserRelation::find()->where(['or', ['user_id' => $this->id],['invite_id'=>$this->id]);
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы