2014-02-06 90 views
0

我有3個表:hotels, hotels_data, hotels_typesLaravel渴望人際關係空查詢

hotelsid, type, stars等.. type字段設置爲外鍵hotels_types引用type_id。我正在設法從hotels_data獲得正確的數據,但在獲得hotels_types標題時有空的結果,我不明白爲什麼。

的代碼如下:

class Hotel extends Eloquent { 

    public function getList() { 

     $data = Hotel::select('id','stars')->with('HotelData', 'HotelType')->paginate(10); 

     return View::make('hotels.index')->with('hotels', $data); 
    } 

    public function HotelData() 
    { 
     return $this->hasOne('HotelsData')->select('id','hotel_id','title'); 
    } 

    public function HotelType() 
    { 
     return $this->hasOne('HotelType','type_id', 'type')->select('id','type_id','title'); 
    } 

} 

回答

0

我獲得期望的結果有以下幾點:

Hotel::select('hotels.*','hotels_types.title as type') 
    ->join('hotels_types', 'hotels.type', '=', 'hotels_types.type_id') 
    ->with('HotelData'); 
0

您使用的是HotelType()錯誤的關係

您的酒店模式應該使用hasOne的倒數,這是屬於關聯,因爲它包含了HotelType的外鍵(當一個表包含一個外鍵時,它總是屬於被指向的表)。

下面應該工作:

public function hotelType() { 
    return $this->belongsTo('HotelType','type', 'type_id')->select('id','type_id','title'); 
} 
+0

謝謝您的貢獻。在發佈之前,我也嘗試過這樣做,但結果仍然爲空。我設法使用leftJoin()助手並指定tables.columns而不是上述方法來找到解決方案。它不工作(可能)與hasOne和belongsTo因爲沒有id列與types.table直接相關的hotel.id – Kyobul

+0

@Kyobul它也值得注意的是,你的關係方法應該是camelcase(HotelType()應該是hotelType( )和HotelData()應該是hotelData())。否則,調用$ hotel-> hotel_type將返回null – TonyArra

+0

謝謝Tony,注意到它 – Kyobul