是否可以在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'