2014-06-20 93 views
0

我的問題是關於查詢Laravel 4.1/ORM中的關係。Laravel 4.1查詢有多少關係?

我有一個「實驗室」模型和「日期」模型。這兩個被配置爲擁有一個2路的關係:

Dates.php:

public function lab(){ 
    return $this->belongsTo('Labs'); 
    } 

Labs.php:

public function dates() { 
    return $this->hasMany('Dates'); 
    } 

在我的控制,我想我的查詢實驗室,並獲得日期爲今日$的實驗室:

$today = new DateTime('today'); 
$activeLab = Labs::hasDate($today); 
return $activeLab; 

類似的東西......但這當然不起作用。

如何檢索「實驗室」,其所擁有的日期與我提供的日期相符?

感謝您的幫助!

編輯:額外的代碼進步..

$today = new DateTime('today'); 
$today = $today->format('Y-m-d'); 
$activeLab = Labs::whereHas('dates', function($q) use ($today){ 
     $q->where('dates.date', $today); 
    })->get(); 

return $activeLab; 

最後的編輯 - 解決方案:

感謝deczo我們能夠確定問題所在。默認情況下,Eloquent使用模型名稱來鏈接到外鍵。我的模型被命名爲Labs(複數),所以它在dates表中查找labs_id。您可以在Labs模型hasMany()語句中指定的外鍵:

public function dates() { 
    return $this->hasMany('Dates', 'lab_id'); 
} 

回答

1
$search; // value to find 

Lab::whereHas('dates', function ($q) use ($search) { 
    $q->where('dates.someColumn', $search); 
})->get(); 

它將返回Labs具有相關日期(或多個)匹配給WHERE條款。

變化Labs的關係:在where子句(SQL 1054未知列 'dates.labs_id':

public function dates() { 
    return $this->hasMany('Dates', 'lab_id'); 
} 
+0

,這將引發一個QueryException對我來說: '欄未發現SELECT * FROM實驗室,供(從date.labs_id = labs.id和dates.date = 2014-06-20)=> 1)中選擇count(*)' – Prefix

+0

可能你應該在那裏有'lab_id'。無論如何顯示你的代碼。 –

+0

德佐,我編輯了與代碼的原始帖子。 「日期」表中確實存在'lab_id',這是一個錯字,我很抱歉。 – Prefix