Laravel postgresql联接错误&引用;“操作员不存在”;
我的laravel查询代码Laravel postgresql联接错误&引用;“操作员不存在”;,laravel,postgresql,laravel-5.6,Laravel,Postgresql,Laravel 5.6,我的laravel查询代码 $query = \DB::table('sample_point_mission') ->rightJoin('sample_point_record', 'sample_point_mission._id', '=','sample_point_record._pid') ->leftJoin('animal_name', 'sample_point_record.animal_name_id', '=','animal
$query = \DB::table('sample_point_mission')
->rightJoin('sample_point_record', 'sample_point_mission._id', '=','sample_point_record._pid')
->leftJoin('animal_name', 'sample_point_record.animal_name_id', '=','animal_name.tid::VARCHAR)')
->leftJoin('geographic_unit', 'sample_point_record.geography_unit_id', '=','geographic_unit.tid::VARCHAR');
$query->get();
错误消息==>
SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: character varying = integer
所以我尝试添加它需要的角色
错误消息:
SQLSTATE[42703]: Undefined column: 7 ERROR: column animal_name.tid::VARCHAR does not exist
我认为不能在常规的Laravel连接函数中使用原始Postgres SQL。但是,您可以(也可能必须)将原始SQL与
DB::raw
一起使用。请尝试以下版本:
$query = \DB::table('sample_point_mission')
->rightJoin('sample_point_record', 'sample_point_mission._id', '=','sample_point_record._pid')
->leftJoin('animal_name a', function($join) {
$join->on(DB::raw("a.tid::VARCHAR"), DB::raw("="), DB::raw("sample_point_record.animal_name_i")) })
->leftJoin('geographic_unit g', function($join) {
$join->on(DB::raw("g.tid::VARCHAR"), DB::raw("="), DB::raw("sample_point_record.geography_unit_id")) })
$query->get();
在这个实例中,您应该使用DB::raw('animal_name.tid::VARCHAR'),因为查询生成器假设整个字符串都是列名。使用DB::raw将阻止这种情况发生,并允许Postgres解析器理解它。
$query = \DB::table('sample_point_mission')
->rightJoin('sample_point_record', 'sample_point_mission._id', '=','sample_point_record._pid')
->leftJoin('animal_name a', function($join) {
$join->on(DB::raw("a.tid::VARCHAR"), DB::raw("="), DB::raw("sample_point_record.animal_name_i")) })
->leftJoin('geographic_unit g', function($join) {
$join->on(DB::raw("g.tid::VARCHAR"), DB::raw("="), DB::raw("sample_point_record.geography_unit_id")) })
$query->get();