如何为每个循环保存Laravel中的逗号分隔值

问题描述 投票:0回答:1

通过使用下面的laravel代码,我与驾驶员ID越来越近

 $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);

并使用以下代码保存请求详细信息,包括上面最近的驱动程序ID

 $request  = new Request;
        $request->user_id          =   $rider_id;
        $request->pickup_latitude  =   $pickup_latitude;
        $request->pickup_longitude =   $pickup_longitude;
        $request->drop_latitude    =   $drop_latitude;
        $request->drop_longitude   =   $drop_longitude;
        $request->driver_id        =   $nearest_car->user_id;
        $request->car_id           =   $car_id;
        $request->pickup_location  =   $pickup_location;
        $request->drop_location    =   $drop_location;
        $request->payment_mode   =   $payment_method_store;

我想做的是获取多个最近的不同驱动程序ID(例如5到10个最近的ID),并将所有ID保存为driver_id列中的逗号分隔值。以上所有驱动程序的详细信息都是相同的。只需要获取所有最近的驱动程序ID并将其保存为逗号分隔的值,如下图所示

enter image description here

laravel group-concat
1个回答
0
投票

假设您的DriverLocation模型具有user_id,则应用以下命令以逗号分隔user_id

$nearest_driver_ids = 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)
    ->get()
    ->implode('user_id', ',');

[implode方法将仅从获取的user_id列表中提取DriverLocation,最后将它们与,结合在一起以形成新的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.