Я новичок в 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?