Mysql 使用laravel语法的Sql leftJoin查询显示错误

Mysql 使用laravel语法的Sql leftJoin查询显示错误,mysql,sql,laravel,laravel-5,Mysql,Sql,Laravel,Laravel 5,这是我用于左连接的查询,它工作正常,但当我将其转换为laravel语法时,缺少了一些东西 要转换的查询是 $result = DB::select("select amenities.name as name,amenities.type_id,amenities.id as id, amenities.icon, rooms.id as status from amenities left join rooms on find_in_set(amenities.id, rooms.amen

这是我用于左连接的查询,它工作正常,但当我将其转换为laravel语法时,缺少了一些东西

要转换的查询是

$result = DB::select("select amenities.name as 
name,amenities.type_id,amenities.id as id, amenities.icon, rooms.id as status 
from amenities left join rooms on find_in_set(amenities.id, rooms.amenities) 
and rooms.id = $room_id and type_id !=4");
我正在做这件事

$result = DB::table('amenities')
            ->select('amenities.name as name', 'amenities.type_id' , 'amenities.id as id'
                , 'amenities.icon', 'rooms.id as status' )
            ->leftJoin('rooms', function ($join) {
                 $join->on('FIND_IN_SET(amenities.id, rooms.amenities)')
                      ->where('rooms.id' , '=', '$room_id')
                      ->where('type_id','!=', 4);
            })->get();
错误是

中的InvalidArgumentException F:\xampp\htdocs\arheb\arheb\vendor\laravel\framework\src\illumb\Database\Query\JoinClause.php 第79行:on子句的参数不足


你的问题是错误的。我假设
便利设施.id
房间.便利设施
分别是
便利设施
房间
表的属性

MySQL FIND_IN_SET()返回字符串在字符串列表中的位置(作为子字符串)

您需要在
on()
函数的第一个和第二个参数中传递列名

$result = DB::table('amenities')
            ->select('amenities.name as name', 'amenities.type_id' , 'amenities.id as id'
                , 'amenities.icon', 'rooms.id as status' )
            ->leftJoin('rooms', function ($join) {
                 $join->on('amenities.id', '=', 'rooms.amenities')
                      ->where('rooms.id' , '=', '$room_id')
                      ->where('type_id','!=', 4);
            })->get();

我想你可以试试这个:

$result = DB::table('amenities')
           ->select('amenities.name as name', 'amenities.type_id' , 'amenities.id as id'
               , 'amenities.icon', 'rooms.id as status' )
           ->leftJoin('rooms', function ($join) {
                $join->on(DB::raw("find_in_set(amenities.id, rooms.amenities)"))
                     ->where('rooms.id' , '=', '$room_id')
                     ->where('type_id','!=', 4);
           })->get();

希望这项工作为你

原始查询中没有
Where
子句。你能在你尝试的第二个查询中将
where
更改为
吗?我如何添加和而不是在何处,你的意思是我在括号内添加和,我不知道laravel是如何工作的,这就是为什么我使用where,所以它像和一样对待它。对不起。将
where
单词更改为
on
。这应该可以推断出
连接上的
条件。您的意思是这样的$result=DB::table('professionals')->select('professionals.name as name'、'professionals.type_id'、'professionals.id as id'、'professionals.icon'、'rooms.id as status')->leftJoin('rooms',function($join){$join->on(DB::raw('find_in_set(professionals.id,rooms.professionals)”))->on('rooms.id'、'='、'rooms"('type_id','!=',4);})->get();仍然向我显示错误on子句的参数不足。哪种代码?我复制了您的代码并检查了它,但它显示了错误。那么为什么我们不能使用find_in_set,它不受Laraveln支持吗亲爱的,它在F:\xampp\htdocs\arheb\arheb\vendor\laravel\framework\src\lighting\Database\Query\JoinCla中显示了相同的错误InvalidArgumentExceptionuse.php第79行:on子句的参数不足。