Laravel 4.1查询有多少关系?

时间:2014-06-20 19:16:10

标签: php mysql laravel laravel-4

我的问题是关于在Laravel 4.1 / ORM中查询关系。

我有一个" Labs"模特和"日期"模型。这两个配置为具有双向关系:

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;

类似的东西......但这当然不起作用。

如何检索" Lab"它拥有的日期与我提供的日期相符吗?

感谢您的帮助!

编辑:额外的代码进度..

$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');
}

1 个答案:

答案 0 :(得分:1)

$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');
}