我的问题是关于在Laravel 4.1 / ORM中查询关系。
我有一个“实验室”模型和一个“日期”模型。两者被配置为具有两种方式的关系:
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(复数),因此它在
labs_id
表中查找dates
。您可以在Labs
模型hasMany()
语句中指定外键:public function dates() {
return $this->hasMany('Dates', 'lab_id');
}
最佳答案
$search; // value to find
Lab::whereHas('dates', function ($q) use ($search) {
$q->where('dates.someColumn', $search);
})->get();
它将返回具有与给定
Labs
子句匹配的相关日期的WHERE
。更改
Labs
上的关系:public function dates() {
return $this->hasMany('Dates', 'lab_id');
}