laravel - Laravel Eloquent WhereIn 0 = 1
问题描述
我试图使用一个whereIn
子句,但我得到了一种罕见的行为。
这是我的关系:
return $this->belongsToMany('App\Models\Role', 'system_users_roles', 'user_id', 'role_id')
->where(function ($query) {
$query->where(function ($querypermissions) {
$querypermissions->whereNotNull('service_id')
->whereHas('permissions', function ($q) {
$q->whereIn('app_id', $this->apps->pluck('id'));
});
})
->orWhereNULL('service_id');
});
此代码返回一些行,但缺少一个(在这种情况下是我需要的)。
如果我改变这一行:
$q->whereIn('app_id', $this->apps->pluck('id'));
对此:
$q->whereIn('app_id', [0 => 1]);
我得到正确的结果。我得到了我需要的行的第一个结果。
我认为这是一个问题$this->apps->pluck('id')
,因为它可能是空的,但它不是
我试过 with $this->apps
, with $this->apps->pluck('id')->toArray()
,但没有任何效果。
有人可以告诉我怎么了!?
更多信息:当我显示 sql 查询(带有->toSql()
)时,它具有:
bla bla bla...
and 0 = 1))
bla bla bla...
就像说数组不正确一样。
但是,正如我之前所说,我尝试了不同的方法来创建一个值为whereIn的数组,但没有任何效果。
我读了这个答案,但我需要额外的帮助。
谢谢!
解决方案
我发现了问题。
$this->apps->pluck('id')
是同一模型上的关系。并且对任何“角色”都有不同的价值。
我更改了代码,为我需要的所有应用程序添加了一个变量:
$apps = Auth::user()->apps->pluck('id');
现在工作正常。
推荐阅读
- python - 使用行和列值将数据添加到数据框中
- php - 在重定向codeigniter4中传递数组setFlashdata
- c - 为什么正值变成负值
- reactjs - React.js 如何从 jwt 令牌中获取用户角色
- mqtt - 尝试从远程 Mosquitto 代理接收到 IoT 设备的 MQTT 消息时出错
- python - 多个函数中的未绑定本地错误
- javascript - 在 CSS 中悬停时隐藏兄弟 div
- swagger - 调用服务但返回代码的描述与我明确定义的不匹配
- arrays - 我不能用 0 填充 C 中的数组。我正在尝试 memset 和 array[]={0};
- java - 关于在 Google Play 控制台上推出应用程序的问题,包括关于 `aewt` 和 `UID` 和 SDK、API 版本的问题