2017-04-17 51 views
0

這是我用於左連接的查詢,它工作正常,但是當我將其轉換爲laravel語法時缺少某些內容。Sql left使用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行:沒有足夠的參數s的on條款。

+0

原始查詢中沒有'Where'子句。你可以在你嘗試的第二個查詢中將「where」更改爲「and」。 –

+0

我如何添加,而不是在哪裏,所以你的意思是我添加和在括號內,我不知道laravel是如何工作的,這就是爲什麼我用它在哪裏,所以它對待它和。 – Hassaan

+0

對不起。將'where'字改爲'on'。這應該推斷'join'的'和'條件。 –

回答

1

您的查詢是錯誤的。我假設amenities.idrooms.amenities分別是amenitiesrooms表的屬性。

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(); 
+0

仍顯示錯誤on子句沒有足夠的參數。 – Hassaan

+0

請添加您的代碼。 –

+0

哪個代碼?我複製你的代碼並檢查它,但它顯示錯誤 – Hassaan

0

我想你可以試試這個:

$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(); 

希望這對你的工作!

+0

沒有親愛的它顯示相同的錯誤InvalidArgumentException在F:\ xampp \ htdocs \ arheb \ Arheb \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Query \ JoinClause.php第79行: 沒有足夠的on子句的參數。 – Hassaan