Yii2 通过表连接条件


Yii2 viaTable join condition

是否可以在viaTable的连接部分中设置条件?目前我得到了这个:

return $this->hasMany(User::className(), ['id' => 'id_user'])
                    ->from(User::tableName())
                    ->viaTable(RoomActiveUser::tableName(), ['id_room' => 'id'],
                        function($query) {
                        return $query->andWhere(['id_role' => 
                                 RoleHelper::getConsultantRole()->id]);
                    });

但这不是一个好的解决方案。为什么?当您执行左连接时,id_role条件实际上将使其成为内部连接。id_role条件应放置在联接ON部分内。

我正在搜索网络并检查代码,但我看不出如何解决它。

我从薛强那里得到了答案——$query->onCondition()应该用于我需要的东西。结果代码:

return $this->hasMany(User::className(), ['id' => 'id_user'])
                    ->from(User::tableName())
                    ->viaTable(RoomActiveUser::tableName(), ['id_room' => 'id'], 
                        function($query) {
                          $query->onCondition(['id_role' => 
                             RoleHelper::getConsultantRole()->id]);
                      });

你有没有试过这样做

->viaTable(RoomActiveUser::tableName(), ['id_room' => 'id', 'id_role' => RoleHelper::getConsultantRole()->id])

这应该创建一个JOIN X on 'id_room' = 'id' AND 'id_role' = '$ConsultantRole_id'