我有以下查询:
public function getEventsByKeywordIds($data){
//Query events by dates
$query = DB::table('events')
->join('events_dates', function($join) use ($data){
$join->on('events.id', '=', 'events_dates.event_id')
->where('events_dates.start_date', "<=", date_format(date_create($data['date_end']), "Y-m-d"))
->where('events_dates.end_date', '>=', date_format(date_create($data['date_start']), "Y-m-d"));
});
//Query events by keywords
$query = $query->join('events_keywords', function($join) use ($data){
$join->on('events.id', '=', 'events_keywords.event_id');
})->whereIn('events_keywords.keyword_id', $data["keyword_ids"]);
//Query places
$query = $query->join('places', function($join) use ($data){
$join->on('events.place_id', '=', 'places.id');
});
//Set offset and limit
$query = $query
->take($data['limit'])
->offset($data['offset'])
->orderBy('events_dates.start_date', 'ASC')
->orderBy('events.name', 'ASC')
->groupBy('events.id');
$events = $query->get();
return $events;
}
我对提及&#34;按关键字查询事件&#34;的部分感兴趣。
events_keywords
是一个多对多表,将事件ID和关键字ID相互关联起来。
需要将每个事件的关键字返回给客户端,但到目前为止,查询仅返回每个事件返回的1个关键字。
注意:$data["keyword_ids"]
是从客户端发送的关键字数组,因为只应返回与某些关键字相关的事件。
您是否有任何建议以简单的方式调整此查询以满足要求?
编辑:我需要的是关键字名称,它存储在关键字表格中(不是多对多。
答案 0 :(得分:0)
我通过Laravel的belongsToMany
关系创建了多对多的关系来解决问题。
foreach($events as $event){
$temp_event = EventModel::find($event->id);
$event->keywords = $temp_event->keywords;
}
return $events;
这不是我确定的最有效的解决方案,但它确实有效。