나는 이것으로 벽에 머리를 치고 있었기 때문에 약간의 도움이 필요하다. 나는 Laravel 4.2.4를 사용하고있다. 두 가지 모델, Event 및 EventDate 있습니다.Laravel - 관계를 통해 쿼리를 제한 하시겠습니까?
// 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'
을 던져 : 그래서 문서에 따르면, 나는 할 수 있어야합니다.
나는 또한 (저장소 패턴을 사용하는 경우) 등의 폐쇄를 사용하여 시도했다 :
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'));
}]);
이 정말 바보 같은 오류 같은 느낌,하지만 난 그것을 알아낼 수 없습니다. 어떤 아이디어?
이렇게하면 전체 데이터 집합이 반환됩니다. 프로파일 러가 열려 있고 다음과 같이 표시됩니다. 'select * from eventdates (모든 이벤트 IDS)의 eventdates.event_id 및 start_date> = '2014-01-01'및 end_date <= '2014-02- 01'' 하지만 실제로 실행되는 쿼리는 아닙니다. 아니면 그럴 수도 있지만, Laravel이 나에게 정확한 세트를 돌려주지는 않습니다. 그런 다음'echo $ events-> count()'를 실행하면 총 결과 수가 표시됩니다. DB에서 해당 쿼리를 실행하면 올바른 결과가 반환되므로 어떤 일이 발생하는지 잘 모르겠습니다. – greggilbert
나는 그것을 얻지 않았다 :( –
기다림, 결과는 정확 했는가? 나는 따르지 않는다. – greggilbert