Пользовательская сборка запросов Laravel 5.6, показывающая пустой результат

Никаких ошибок, просто пустой результат. Я пытаюсь понять, почему этот запрос в модели показывает пустую коллекцию.

Запрос рабочей среды Mysql:

select
    u.`name`, u.email, ual.admin, a.account_name
from
    users as u
    join users_account_link as ual on u.id = ual.user_id and u.account_id_in_use = ual.account_id
    join accounts a on ual.account_id = a.id
where
    u.sub = 'ABCDE';

Выдает одну строку, содержащую желаемый результирующий набор.

Воссоздание этого в построителе запросов Laravel:

$settings = DB::table('users as u')
            ->join('users_account_link as ual', function ($join) {
                  $join->on('u.id', '=', 'ual.user_id')
                       ->where('u.account_id_in_use', '=', 'ual.account_id');
                  })
            ->join('accounts as a', 'ual.account_id', '=', 'a.id')
            ->select('u.name as user_name', 'u.email as user_email', 'ual.admin as admin_check', 'a.account_name')
            ->where('u.sub',auth()->user()->sub)
            ->get();

dd($settings);

Предоставляет пустую коллекцию. Я сделал много пользовательских запросов, которые работают хорошо, однако проблема, которую я сузил, — это дополнительное условие для join users_account_link as ual on u.id = ual.user_id and u.account_id_in_use = ual.account_id, и я попытался переместить это условие в предложение where, которое по-прежнему дает пустой результат.


person Wick 12c    schedule 23.05.2018    source источник


Ответы (1)


'u.account_id_in_use', '=', 'ual.account_id' оба являются целыми числами, однако заменяют u.account_id_in_use на жестко закодированное целое число, например. 2 вернет результат. Поэтому у Laravel, похоже, есть проблема с этим полем, и вместо where-> на whereRaw теперь возвращается желаемый результат.

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

Надеюсь, это поможет всем нуждающимся.

person Wick 12c    schedule 23.05.2018