Laravel4 - > whereIn:获取每个事件的所有关键字

时间:2014-12-24 22:59:14

标签: php mysql laravel-4 orm

我有以下查询:

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"]是从客户端发送的关键字数组,因为只应返回与某些关键字相关的事件。

您是否有任何建议以简单的方式调整此查询以满足要求?

编辑:我需要的是关键字名称,它存储在关键字表格中(不是多对多。

1 个答案:

答案 0 :(得分:0)

我通过Laravel的belongsToMany关系创建了多对多的关系来解决问题。

    foreach($events as $event){ 
        $temp_event = EventModel::find($event->id); 
        $event->keywords = $temp_event->keywords; 
    } 

    return $events; 

这不是我确定的最有效的解决方案,但它确实有效。