2016-08-03 57 views
0

我在我的项目中有事件,每个事件可以有多个日期,例如事件“XYZ”可以在“1月21日”,“8月20日”和“12月30日”并且它们是每年递归的。以下是我的型号:从Laravel的关系表中选择字段

class Event extends Model { 

    public function dates() { 
     return $this->hasMany('App\EventDate'); 
    } 

} 


class EventDate extends Model 
{ 

    public function event() 
    { 
     return $this->belongsTo('App\Event'); 
    } 
} 

现在我想选择事件并按事件日期排列,以便日后更近。

事件::与([ '日期'=>功能($查询){

$查询 - >其中( '起始日期', '>',碳::现在()); $查询 - > orderBy('start_date');

}]);

但它每年都会递归,所以要检查将来发生的事件,这是一个问题,以及在start_date上排序事件本身。

+0

你这是什么在你的EventDate表中有吗?你是否只存储日/月或一年? –

回答

0

最简单的办法是获取事件的日期,其相应的事件:

$eventDates = EventDate::with('event') 
    ->where('start_date', '>', Carbon::now()) 
    ->orderBy('start_date') 
    ->all(); 

现在,你可以通过事件的日期,访问事件数据迭代方式如下:

foreach ($eventDates as $eventDate) { 
    echo $eventDate->event->name; 
}