Передача привязок параметров в конструктор запросов Laravel?

В настоящее время у меня есть SQL-запрос, с которым мне сегодня помог фантастический член stackoverflow. На данный момент это работает абсолютно нормально и так, как я хочу, чтобы это работало.

Единственная проблема — это RAW SQL, и мне бы очень хотелось, чтобы это работало с Laravel Query Builder.

Извините, это редактирование — вот оригинальный запрос:

    $addresses = DB::select(
DB::raw('
(SELECT
"Company" AS object_type_name,
companies.company_name AS object_name,
addresses.*
FROM
addresses
INNER JOIN
companies
ON
addresses.object_id = companies.id
WHERE
addresses.object_type = 2)
UNION ALL
(SELECT
"Job" AS object_type_name,
jobs.job_title AS object_name,
addresses.*
FROM
addresses
INNER JOIN
jobs
ON
addresses.object_id = jobs.id
WHERE
addresses.object_type = 4)
'));

Вот код, который у меня есть:

    $bindings = array(
'soft_deleted' => 0,
'user' => 1,
'company' => 2,
'candidate' => 3,
'job' => 4,
);

$companies = DB::table('addresses')->select(
'addresses.*',
'companies.company_name as object_name'
)->where('addresses.soft_deleted', '=', 0)->join('companies', function($join) use ($bindings){
$join->on('addresses.object_id', '=', 'companies.id')
->where('addresses.object_type', '=', $bindings['company']);
});

$jobs = DB::table('addresses')->select(
'addresses.*',
'jobs.job_title as object_name'
)->join('jobs', function($join) use ($bindings){
$join->on('addresses.object_id', '=', 'jobs.id')
->where('addresses.object_type', '=', $bindings['job']);
});

$addresses = $companies->unionAll($jobs)->get();

С кодом выше я получаю следующую ошибку:

SQLSTATE [HY093]: неверный номер параметра (SQL: (выберите addresses,, companies,company_name как object_name от addresses внутреннее соединение companies на addresses,object_id знак равно companies,id а также addresses,object_type = 2 где addresses,soft_deleted = 0) объединить все (выберите addresses,, jobs,job_title как object_name от addresses внутреннее соединение jobs на addresses,object_id знак равно jobs,id а также addresses,object_type знак равно

Я потратил много часов на поиски, но не могу найти ответ на эту маленькую проблему.

0

Решение

Мне удалось это исправить. Это было так же просто, как удаление ->where изнутри каждого замыкания объединения и связывания его с самим объединением, а не с вложением.

До:

$companies = DB::table('addresses')->select(
'addresses.*',
'companies.company_name as object_name'
)->where('addresses.soft_deleted', '=', 0)->join('companies', function($join) use ($bindings){
$join->on('addresses.object_id', '=', 'companies.id')
->where('addresses.object_type', '=', $bindings['company']);
});

$jobs = DB::table('addresses')->select(
'addresses.*',
'jobs.job_title as object_name'
)->join('jobs', function($join) use ($bindings){
$join->on('addresses.object_id', '=', 'jobs.id')
->where('addresses.object_type', '=', $bindings['job']);
});

После:

    $companies = DB::table('addresses')->select(
'addresses.*',
'companies.company_name as object_name'
)->where('addresses.soft_deleted', '=', 0)->join('companies', function($join){
$join->on('addresses.object_id', '=', 'companies.id');
})->where('addresses.object_type', '=', 2);

$jobs = DB::table('addresses')->select(
'addresses.*',
'jobs.job_title as object_name'
)->where('addresses.soft_deleted', '=', 0)->join('jobs', function($join){
$join->on('addresses.object_id', '=', 'jobs.id');
})->where('addresses.object_type', '=', 4);

$addresses = $companies->unionAll($jobs)->get();

Надеюсь, это кому-нибудь поможет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]