【发布时间】:2020-04-06 13:06:50
【问题描述】:
我的driver_location table 中有以下数据库结构
从这张表中,我正在获取 5 公里范围内的附近司机 ID,并且在线状态与 laravel 中的以下查询相同
$nearest_car = DriverLocation::select(DB::raw('*, ( 6371 * acos( cos( radians('.$pickup_latitude.') ) * cos( radians( latitude ) ) * cos(radians( longitude ) - radians('.$pickup_longitude.') ) + sin( radians('.$pickup_latitude.') ) * sin( radians( latitude ) ) ) ) as distance'))
->having('distance', '<=', 5)->where('driver_location.status','Online')->where('driver_location.car_id',$car_id);
现在我要做的是将driver_location 表中的每个用户 ID 附近的每个请求插入到bid_request 表中,限制为 5 个附近的驱动程序。我已经尝试使用如下的 for 循环,但它会多次从驱动程序位置表中插入相同 user_id 的记录。我需要为每个用户一个请求
for($i=0;$i<5;$i++){
DB::table('bid_request')->insert(
array(
'user_id' => $rider_id,
'group_id' => null,
'pickup_latitude' => $pickup_latitude,
'pickup_longitude' => $pickup_longitude,
'drop_latitude' => $drop_latitude,
'drop_longitude' => $drop_longitude,
'driver_id' => $nearest_car->user_id,
'car_id' => $car_id,
'pickup_location' => $pickup_location,
'drop_location' => $drop_location,
'payment_mode' => $payment_method_store,
'status' => 'Pending',
'is_wallet' => $is_wallet,
'driver_mobile' => $driver_details->mobile_number,
'driver_avg_ratings' => $driver_details->driver_avg_ratings,
'distance' => $dis,
'min_time' => $get_near_car_time
//minimum time and distance needs to b
)
);
}
}// end $is_wallet!='Bid'
【问题讨论】: