Laravel Eloquent, где In 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'), потому что он может быть пустым, но это не так.

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

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

Дополнительная информация: когда я показываю запрос sql (с ->toSql()), он имеет:

bla bla bla...

and 0 = 1)) 

bla bla bla...

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

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

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

Благодарю вас!


person SeiyaJapon    schedule 23.09.2019    source источник
comment
Попробуйте dd($this->apps->pluck('id')) перед оператором return в ваших отношениях, каков точный результат?   -  person Salim Djerbouh    schedule 23.09.2019
comment
Вывод правильный: Collection {#534 ▼ #items: array:2 [▼ 0 => 1 1 => 2 ] }   -  person SeiyaJapon    schedule 23.09.2019
comment
Хорошо, теперь попробуйте передать значения жестко запрограммированными, например $q->whereIn('app_id', [1, 2]);, это даст желаемые результаты?   -  person Salim Djerbouh    schedule 23.09.2019
comment
Да, да. С этим у меня получилось. По мне нужно динамически. Но я думаю, что нашел проблему ... спасибо, парень!   -  person SeiyaJapon    schedule 23.09.2019


Ответы (1)


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

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

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

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

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

person SeiyaJapon    schedule 23.09.2019