mysql - 使用 Laravel 语法的 Sql leftJoin 查询显示错误

标签 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.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 in F:\xampp\htdocs\arheb\Arheb\vendor\laravel\framework\src\Illuminate\Database\Query\JoinClause.php line 79: Not enough arguments for the on clause.

最佳答案

您的查询有误。我假设 amenities.idrooms.amenities 分别是 amenitiesrooms 表的属性。

MySQL FIND_IN_SET() returns the position of a string if it is present (as a substring) within a list of strings.

您需要在 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();

关于mysql - 使用 Laravel 语法的 Sql leftJoin 查询显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43452530/

相关文章:

mysql - 外部系统中的高级 SQL 查询

php - 从 MySQL 获取 PHP 值,如果没有记录 - 插入它

mysql - 连接两个表以获取计数

mysql - 在连接表上有条件的内部连接

php - Laravel Vue - 在 json 响应上获得 Eloquent

php - 我想在 laravel 5 中用户无法分别登录用户名和密码时显示特定消息

php - 通过 Laravel/Eloquent 插入 MySQL 行时出现问题

mysql - MySQL WHERE 中一个字段的两个条件

mysql - SQL-显示 null、0 和非当前值

sql - SQL Server 中 SUBSTRING 与 LEFT 的性能