Php laravel获得所有活动的所有地点

Php laravel获得所有活动的所有地点,php,laravel-4,orm,Php,Laravel 4,Orm,我终于学会了Laravel ORM,坦率地说,它让我很沮丧,因为我的工作期限很紧 我正在尝试最简单的事情,用SQL在几秒钟内就可以轻松实现,但使用ORM半小时后,我就是无法让它工作 一个事件有一个位置。在EventModel中: public function place(){ $this->hasOne('zwoop\models\place\PlaceModel', 'place_id'); } 一个地方可以属于许多事件。就地模式: public function ev

我终于学会了Laravel ORM,坦率地说,它让我很沮丧,因为我的工作期限很紧

我正在尝试最简单的事情,用SQL在几秒钟内就可以轻松实现,但使用ORM半小时后,我就是无法让它工作

一个事件有一个位置。在EventModel中:

public function place(){ 
    $this->hasOne('zwoop\models\place\PlaceModel', 'place_id'); 
} 
一个地方可以属于许多事件。就地模式:

public function events(){ 
    $this->belongsToMany('zwoop\models\event\EventModel'); 
} 
现在在EventModel中,获取位置在特定范围内的所有事件的结构是什么?(例如,
where place.lat>input_lat and lng>input_lng
(简化)。
我会给出示例代码,但我完全搞不懂

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

你看过Laravel文档的部分了吗

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

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

  • 使用
    
    $places=Place::where('lat','>',input_lat)->where('lng','>',input_lng)->get();
    $places=$places->list('id');
    
  • 使用获取所有事件ID
    
    事件::其中('place_id',$places)->get();
    
  • 完成了


    当然,您可以将这两者结合起来,形成一个查询。就我个人而言,我不喜欢混合查询,因为它会在您的情况下提高性能。

    我尝试了很多方法,但总会出现一些无意义的错误。这次是:
    “对非对象调用成员函数getRelationCountQuery()”
    我确信这是我的错,但我承受了很大的压力。没关系,谢谢你的帮助。我对你的答案投了赞成票,现在我将使用查询生成器。我只是有点失望,我认为这会更直观,但我觉得编写和理解比原生sql更困难。谢谢,不幸的是,这会让我陷入困境我决定使用查询生成器并定义作用域来清理它。它的工作原理与此类似。谢谢您的帮助。