我一直在用头撞墙,所以我需要一些帮助。我正在使用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'));
}]);
这感觉真的是一个非常愚蠢的错误,但我无法弄清楚。有什么想法吗?
答案 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_date
和eventdates
字段。
答案 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');
谢谢,所有。