Как сохранить значение, разделенное запятыми, в Laravel для каждого цикла - PullRequest
0 голосов
/ 08 января 2020

Я получаю ближайший к идентификатору водителя, используя ниже 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);

и сохраняю детали запроса с кодом ниже, включая вышеуказанный идентификатор ближайшего водителя

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

что я Вы хотите получить несколько ближайших различных идентификаторов драйвера (например, от 5 до 10 ближайших идентификаторов) и сохранить все идентификаторы как разделенные запятыми значения в столбце driver_id. Все вышеперечисленные детали одинаковы для всех драйверов. Нужно только получить все ближайшие идентификаторы драйверов и сохранить их в виде значений, разделенных запятыми, как показано ниже:

enter image description here

1 Ответ

0 голосов
/ 08 января 2020

Если ваша модель 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 и, наконец, соедините их с ,, чтобы сформировать новую строку.

...