Laravel Eloquent JOIN () с примитивным типом данных вызывает ошибки - PullRequest
0 голосов
/ 07 февраля 2020

Я новичок в Laravel. Этот запрос отлично работает:

    $pageslugs = DB::table('page_slugs AS pslug')
      ->select(explode(',','pslug.page_id,pslug.slug,dslug.slug AS default_slug'))
      ->join('page_slugs AS dslug',function($join){
        $join->on('dslug.page_id','=','pslug.page_id');
        //$join->on('dslug.locale','=',DB::raw('en'));
        //$join->on('dslug.locale','=','en');
        $join->on('dslug.active','=',DB::raw(1));
      })
      ->whereIn('pslug.page_id',Arr::pluck($menupages,'page_id'))
      ->where([['pslug.active','=',1],['pslug.locale','=',$lang],['dslug.locale','=',app('config')->get('app.locale')]])
      ->get()
      ->toArray();

Но если я раскомментирую $join->on('dslug.locale','=',DB::raw('en')); или $join->on('dslug.locale','=','en');, я получу сообщение об ошибке:

Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'en' in 'on clause' (SQL: select `pslug`.`page_id`, `pslug`.`slug`, `dslug`.`slug` as `default_slug` from `page_slugs` as `pslug` inner join `page_slugs` as `dslug` on `dslug`.`page_id` = `pslug`.`page_id` and `dslug`.`locale` = en and `dslug`.`active` = 1 where `pslug`.`page_id` in (19, 21, 11, 18, 22, 12, 13, 16, 14, 15, 17) and (`pslug`.`active` = 1 and `pslug`.`locale` = en and `dslug`.`locale` = en)) in file /var/www/john.project.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 664

Как выполнить объединение с примитивным типом данных в Laravel?

1 Ответ

2 голосов
/ 07 февраля 2020

Полагаю, вы пытаетесь добавить дополнительные фильтры в предложение join. Это можно сделать, просто добавив предложения where в ваше объединение:

->join('page_slugs AS dslug', function ($join) {
    $join->on('dslug.page_id', '=', 'pslug.page_id')
        ->where('dslug.locale', 'en')
        ->where('dslug.active', true);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...