2016-04-27 46 views
0

我無法弄清楚如何做一個聯合聲明的等效語言。Laravel Eloquent JOIN WHIN i​​d爲null

基本上從下面的代碼中,我要像下面這樣的查詢:

SELECT * 
FROM Vehicle v 
JOIN VehicleImage i ON v.id = i.vehicle_id 
limit 24 

這是查詢我目前正在使用:

$cars = Vehicle::with(['images' => function($q){ 
    $q->orderBy('order'); 
}])->take(24)->get(); 

目前其帶回所有車輛無論是否有一個圖像或沒有 - 所以我想一個左連接。我不想要這個,我只想要有一個或多個圖像的行。這可能嗎?

class Vehicle extends Eloquent 
    { 

     public function images() 
     { 

      return $this->hasMany('App\Domain\Vehicles\VehicleImage'); 

     } 
    } 

    class VehicleImage extends Eloquent { 

     public function vehicle() 
     { 
      return $this->belongsTo('App\Domain\Vehicles\Vehicle'); 
     } 

    } 
+0

它doen't加入了'with'。這是渴望加載,它使用2個查詢。第二個是「IN」。 – Dinar

回答

0

它不加入with。它急於加載並使用2個查詢。第二個是IN

因此,如果您不想使用JOIN等效,請使用查詢生成器。

Vehicle::leftJoin('...')->get();

https://laravel.com/docs/5.2/queries

另外,如果你想監控你的查詢,安裝這個軟件包:

https://github.com/barryvdh/laravel-debugbar

+0

謝謝。這是否意味着我試圖做的是單靠雄辯模型無法實現?這意味着我可以使用一個模型(車輛)加入,但不是兩個? –

+0

爲什麼? 這隻意味着你可以使用ORM-way或Query Builder Way。但是ORM不會使用JOIN。你也可以以任何方式混合和匹配它們,因爲它們是兼容的。 – Dinar

+2

我認爲它應該是內部連接做的答案是:'Vehicle :: join('...') - > get(); ' –