2014-06-24 3 views
0

나는 이것으로 벽에 머리를 치고 있었기 때문에 약간의 도움이 필요하다. 나는 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')); 
}]); 

이 정말 바보 같은 오류 같은 느낌,하지만 난 그것을 알아낼 수 없습니다. 어떤 아이디어?

답변

0

이 작업을 시도 할 수 있습니다 : start_dateend_date 필드가 eventdates 테이블에 사용할 수 있기 때문에

$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(); 

그것입니다.

+0

이렇게하면 전체 데이터 집합이 반환됩니다. 프로파일 러가 열려 있고 다음과 같이 표시됩니다. 'select * from eventdates (모든 이벤트 IDS)의 eventdates.event_id 및 start_date> = '2014-01-01'및 end_date <= '2014-02- 01'' 하지만 실제로 실행되는 쿼리는 아닙니다. 아니면 그럴 수도 있지만, Laravel이 나에게 정확한 세트를 돌려주지는 않습니다. 그런 다음'echo $ events-> count()'를 실행하면 총 결과 수가 표시됩니다. DB에서 해당 쿼리를 실행하면 올바른 결과가 반환되므로 어떤 일이 발생하는지 잘 모르겠습니다. – greggilbert

+0

나는 그것을 얻지 않았다 :( –

+0

기다림, 결과는 정확 했는가? 나는 따르지 않는다. – greggilbert

0

나는이 질문에 다소 답할 수 있습니다. 나는 더 나은 성공을 어디서 사용 했는가? :

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

고마워, 모두.

관련 문제