我终于学习了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最终是否是最有效的解决方案......
答案 0 :(得分:1)
您是否查看过Laravel文档的Querying Relations部分?
EventModel::whereHas('place', function($q) {
$q->where('lat', '>', input_lat)
->where('lng', '>', input_lng);
})->get();
答案 1 :(得分:0)
嗯。让我在这里解释一下。有很多方法可以做到这一点。但最有效的方法应该如下:
$places = Place::where('lat', '>', input_lat)->where('lng', '>', input_lng)->get();
$places = $places->lists('id');
Events::whereIn('place_id', $places)->get();
完成了!
当然,您可以将两者结合起来并使其成为一个查询。就个人而言,我不喜欢混合查询,认为它可以在你的情况下给你一点性能提升。