我的问题是关于在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');
}

10-07 17:47