我以这种方式设置了Mall和City模型的关系:
商城模特:
public function city() {
return $this->belongsTo('App\City');
}
城市模特:
public function malls() {
return $this->hasMany( 'App\Mall' );
}
我在City类中有一个方法,返回半径附近的所有城市:
public function getNearby($lat, $long, $r) {
// return array of id of cities in $r radius
}
当我想要到附近城市的所有购物中心时,我会这样做:
function getMallsInNearby() {
$city_ids = City::getNearby($lat, $long, $r');
$all_malls = Mall::all();
foreach ( $all_malls as $mall ) {
$malls[] = (in_array($mall->city->id , $city_ids) ? $mall : null);
}
return array_filter($malls);
}
我尝试在商场和城市使用whereHas()方法,但没有任何成功。 在Laravel中以雄辩的关系实现这一目标的最佳途径是什么?
答案 0 :(得分:2)
使用whereIn()...
$city_ids = City::getNearby($lat, $long, $r');
$malls = Mall::whereIn('city_id', $city_ids);
查看文档......你几乎可以做任何事...... https://laravel.com/docs/5.4/queries
希望这有帮助