【发布时间】:2017-09-13 03:11:51
【问题描述】:
这是我用于左连接的查询,它工作正常,但是当我将它转换为 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\Illuminate\Database\Query\JoinClause.php 第 79 行:on 子句的参数不足。
【问题讨论】:
-
原始查询中没有
Where子句。您能否在您尝试的第二个查询中将where更改为and。 -
我如何添加和而不是在哪里,所以你的意思是我在括号内添加和,我不知道 laravel 是如何工作的,这就是为什么我使用 where 所以它对待它就像和。
-
对不起。将
where单词更改为on。这应该推断出join上的and条件。 -
你的意思是像这个 $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.便利设施)")) ->on('rooms.id' , '=', '$room_id') ->on('type_id','!=', 4); })->get();跨度>
标签: mysql sql laravel laravel-5