Laravel - 通过关系限制查询?

时间:2014-06-24 04:38:35

标签: php laravel laravel-4

我一直在用头撞墙,所以我需要一些帮助。我正在使用Laravel 4.2.4。我有两个模型,Event和EventDate。

// Event has id, name
class Event extends Eloquent
{
    protected $table = 'events';
    protected $guarded = ['id'];
    public $timestamps = false;

    public function eventdates()
    {
        return $this->hasMany('\EventDate', 'event_id', 'id');
    }
}

// EventDate has id, event_id, start_date, end_date
class EventDate extends Eloquent
{
    protected $table = 'eventdates';
    protected $guarded = ['id'];
    public $timestamps = false;
}

现在我正在尝试在某个开始日期和结束日期之间获取事件。所以根据文档,我应该能够做到:

\Event::with('eventdates')->where('start_date', '>=', '2014-01-01')->where('end_date', '<=', '2014-02-01')->get();

但所有这一切都是抛出SQLSTATE[42S22]: Column not found: 1054 Unknown Column 'eventdates.start_date' in 'where clause'

我也尝试过使用Closures(如果使用存储库模式),例如:

return $this->model->with(['eventdates' => function($query) use ($startDate, $endDate) {
    $query->where('start_date', '<=', $endDate->format('Y-m-d'));
    $query->where('end_date', '>=', $startDate->format('Y-m-d'));
}]);

这感觉真的是一个非常愚蠢的错误,但我无法弄清楚。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

$events = \Event::with(array('eventdates' => function($query){
    // Querying in the eventdates table
    $query->where('start_date', '>=', '2014-01-01')
          ->where('end_date', '<=', '2014-02-01');
}))->get();

这是因为start_date表格中提供了end_dateeventdates字段。

答案 1 :(得分:0)

我可以或多或少地回答这个问题。我使用whereHas获得了更好的成功:

return $this->model->whereHas('eventdates', function($query) use ($startDate, $endDate) {
    $query->where('start_date', '<=', $endDate->format('Y-m-d'));
    $query->where('end_date', '>=', $startDate->format('Y-m-d'));
})
->with('eventdates');

谢谢,所有。