laravel为所有活动场所提供所有场所

时间:2015-01-06 00:36:17

标签: php laravel-4 orm

我终于学习了Laravel ORM,坦率地说,当我在紧迫的截止日期前工作时,它让我感到沮丧。

我正在尝试最简单的事情,很容易在几秒钟内在SQL中实现,并且在使用ORM半小时后,我无法让它工作。

1个活动有1个地方。在EventModel中:

public function place(){ 
    $this->hasOne('zwoop\models\place\PlaceModel', 'place_id'); 
} 

1个地方可以属于很多活动。在PlaceModel:

public function events(){ 
    $this->belongsToMany('zwoop\models\event\EventModel'); 
} 

现在在EventModel中,获取位置在某些范围内的所有事件的结构是什么? (例如where place.lat > input_lat and lng > input_lng(简化) 我会给出示例代码,但我根本无法弄明白。

这只是一个很长的查询的开始,我真的很想知道ORM最终是否是最有效的解决方案......

2 个答案:

答案 0 :(得分:1)

您是否查看过Laravel文档的Querying Relations部分?

EventModel::whereHas('place', function($q) {
    $q->where('lat', '>', input_lat)
        ->where('lng', '>', input_lng);
})->get();

答案 1 :(得分:0)

嗯。让我在这里解释一下。有很多方法可以做到这一点。但最有效的方法应该如下:

  1. 使用获取某些范围内的所有位置 $places = Place::where('lat', '>', input_lat)->where('lng', '>', input_lng)->get(); $places = $places->lists('id');
  2. 使用获取所有事件ID Events::whereIn('place_id', $places)->get();
  3. 完成了!

    当然,您可以将两者结合起来并使其成为一个查询。就个人而言,我不喜欢混合查询,认为它可以在你的情况下给你一点性能提升。