Php laravel获得所有活动的所有地点
我终于学会了Laravel ORM,坦率地说,它让我很沮丧,因为我的工作期限很紧 我正在尝试最简单的事情,用SQL在几秒钟内就可以轻松实现,但使用ORM半小时后,我就是无法让它工作 一个事件有一个位置。在EventModel中: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
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');
事件::其中('place_id',$places)->get();
当然,您可以将这两者结合起来,形成一个查询。就我个人而言,我不喜欢混合查询,因为它会在您的情况下提高性能。我尝试了很多方法,但总会出现一些无意义的错误。这次是:
“对非对象调用成员函数getRelationCountQuery()”
我确信这是我的错,但我承受了很大的压力。没关系,谢谢你的帮助。我对你的答案投了赞成票,现在我将使用查询生成器。我只是有点失望,我认为这会更直观,但我觉得编写和理解比原生sql更困难。谢谢,不幸的是,这会让我陷入困境我决定使用查询生成器并定义作用域来清理它。它的工作原理与此类似。谢谢您的帮助。