首页 > 解决方案 > 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的数组,但没有任何效果。

我读了这个答案,但我需要额外的帮助。

谢谢!

标签: laraveleloquentwhere-in

解决方案


我发现了问题。

$this->apps->pluck('id')是同一模型上的关系。并且对任何“角色”都有不同的价值。

我更改了代码,为我需要的所有应用程序添加了一个变量:

$apps = Auth::user()->apps->pluck('id');

现在工作正常。


推荐阅读