Laravel Eloquent WhereIn 0 = 1 - PullRequest
       99

Laravel Eloquent WhereIn 0 = 1

0 голосов
/ 23 сентября 2019

Я пытаюсь использовать предложение 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'), потому что она может быть пустой, но это не

Я пытался с $this->apps, с $this->apps->pluck('id')->toArray(), но ничего не работает.

Может кто-нибудь сказать мне, что не так!?

Подробнее: Когда я показываю SQL-запрос (с ->toSql()), он имеет:

bla bla bla...

and 0 = 1)) 

bla bla bla...

как сказать массив неверен .

Но, как я уже говорил, я пытался разными способами создать массив со значениями где в , но ничего не работает.

Я прочитал этот ответ , но мне нужна дополнительная помощь.

Спасибо!

1 Ответ

0 голосов
/ 23 сентября 2019

Я обнаружил проблему.

$this->apps->pluck('id') - это отношение на той же модели.И для любой «роли» есть разные значения.

Я изменил код, добавив переменную со всеми нужными мне приложениями:

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

Теперь работает отлично.

...