【问题标题】:For Each Loop in Laravel对于 Laravel 中的每个循环
【发布时间】: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'

【问题讨论】:

    标签: laravel foreach


    【解决方案1】:

    使用 Forloop 你应该在变量中指定$i

    for($i=0;$i<5;$i++){
        DB::table('bid_request')->insert(
            'user_id'     =>   $rider_id[$i], 
            '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
         );
        }
     }
    

    如果你使用 ForEach 循环:

    foreach($variable_which_contains_all_values as $value){
            DB::table('bid_request')->insert(
                'user_id'     =>   $value->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
             );
    
            }
         }
    

    【讨论】:

      【解决方案2】:

      如果您想在 bid_request 表中插入 5 条记录,而不是从下面的查询中仅获取 5 条记录:

      $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)
      ->limit(5)->get();
      

      现在您需要在表中插入记录数组:

      $data = [];
      foreach ($nearest_car as $key => $value) {
        $data[] = [
          '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'     =>   $value->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
        ];
      }
      

      插入表格:

      DB::table('bid_request')->insert($data);
      

      【讨论】:

      • 感谢它的魅力。当这么多用户使用相同的设备时,会不会是性能问题?
      • :) 不是什么大问题,bcz 用于记录插入它只会执行一个查询。如果记录太大,可能会在 for 循环中花费时间,但记录将插入成束
      • 一个问题,driver_avg_ratings 是从用户表中插入的,每个驱动程序都不同,但它插入的值与所有驱动程序的第一个驱动程序评级相同
      • 在 foreach 循环中我们使用 $value 变量,所以你可以使用它。供参考我在 driver_id 中所做的事情:'driver_id' => $value->user_id,
      • 当我使用这个'driver_avg_ratings' => $value->$driver_details->driver_avg_ratings,它没有插入任何数据
      【解决方案3】:

      要在您的视图中访问它,您必须执行以下操作:

      @foreach ($text as $demo)
      <p>This my product name {{ $demo->name }}</p>
      <p>This my product category {{ $demo->category->name}}</p>
      @endforeach
      

      【讨论】:

        猜你喜欢
        • 2014-05-04
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 2020-05-11
        相关资源
        最近更新 更多