2014-02-20 22 views
4

我有一個名爲buildingsflats如何在laravel的Eloquent ORM中編寫內部連接?

建築物表

Building_Id | Building_Name | .......| Building_Owned_By | .... 

單位表

Flat_Id | Flat_Name | ........| Fk_Building_Id | ..... 

在我的模型表

大廈

class Building extends Eloquent { 
    protected $primaryKey = "Building_Id"; 
    protected $table = 'buildings'; 
    ....... 
    ....... 
    public function flat() 
    { 
     return $this->hasMany('Flat', 'Fk_Building_Id', 'Building_Id'); 
    } 
} 

class Flat extends Eloquent { 
    protected $primaryKey = "Flat_Id"; 
    protected $table = 'flats'; 
    ....... 
    ....... 
    public function building() { 
     return $this->belongsTo('Building','Fk_Building_Id', 'Building_Id'); 
    } 
} 

,並在我的控制器

$flats = Flat::where('Fk_Building_Id', '=',$buildingid) 
       ->where('Building_Owned_By', '=',Auth::user()->Login_Id) 
       ->orderBy('Flat_Name') 
       ->get(array('Flat_Id as flatId', 'Flat_Name as flatName')) 
       ->toArray(); 

但它沒有返回。

我們如何在Eloquent Orm中執行內部連接(我不想使用流利的查詢)?

更新

感謝@Creator他寶貴的時間和幫助。他幫我找到了這個。該解決方案是我們必須使用whereHas我們重寫代碼爲

$flats = Flat::whereHas('building', function($q){ 
         $q->where('Building_Owned_By', '=',Auth::user()->Login_Id); 
       }) 
       ->where('Fk_Building_Id', '=',$buildingid) 
       ->orderBy('Flat_Name') 
       ->get(array('Flat_Id as flatId', 'Flat_Name as flatName')) 
       ->toArray(); 

回答

4

這樣做:

class Building extends Eloquent { 
protected $primaryKey = "Building_Id"; 
protected $table = 'buildings'; 
....... 
....... 
public function flat() 
{ 
    return $this->HasMany('Flat', 'Fk_Building_Id', 'Building_Id'); 
} 

}

查詢來獲取所有的公寓大廈:

Building::with('flat')->(some_condition)->get(); 




class Flat extends Eloquent { 
    protected $primaryKey = "Flat_Id"; 
    protected $table = 'flats'; 
    ....... 
    ....... 
    public function building() { 
    return $this->HasOne('Building','Fk_Building_Id', 'Building_Id'); 
    } 
} 

查詢以獲得與建築物信息平坦

 Flat::with('building') 
      ->where('Building_Owned_By', '=',Auth::user()->Login_Id)   
      ->orderBy('Flat_Name') 
      ->get(array('Flat_Id as flatId', 'Flat_Name as flatName')) 
      ->toArray(); 
+0

同樣的錯誤返回null – manuthalasseril

+0

檢查答案嗎?公寓有一個建築物嗎? –

+0

每個單位都有一個buildingId,也可能是兩個單位具有相同的buildingID可以發生。我的意思是每個buildin不包含單位 – manuthalasseril

1

試試這個:

Flat::with(array('building'=>function($query){ 
    $query->where('Building_Owned_By', '=',Auth::user()->Login_Id) 
}))->where('Fk_Building_Id', '=',$buildingid)->orderBy('Flat_Name') 
    ->get(array('Flat_Id as flatId', 'Flat_Name as flatName'))->toArray(); 
相關問題