[英]Yii2 viaTable join condition
可以在viaTable的join部分设置条件吗? 目前我得到了这个:
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'
创建一个JOIN X on 'id_room' = 'id' AND 'id_role' = '$ConsultantRole_id'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.