我的 select 框给了我错误的值。如何在laravel中进行foreach?

My select box give me the wrong value. How to do foreach in laravel?

我正在使用 laravel 5.2 并且我的表单中有一个 select 框。 select 框用于列出当时可用的 driver。我只有 2 个 driver,所有 driver 都被预订了。但是当我进行 driver 预订时,列表中显示了 1 driver。我认为我的 foreach 有错误。我对吗?你知道怎么解决吗? 下面是我的控制器代码:

    $driverReserved = Reservation::select("RES_DRIVER")->where("RES_RETURN", '>', $reservation[0]->RES_DEPARTURE)->where('RES_STATUS', '=', 'Assigned')->Where('RES_SPK', '!=', $request['RES_SPK'])->exists();

    $driverReserved1 = Reservation::select("RES_DRIVER")->where("RES_RETURN", '>', $reservation[0]->RES_DEPARTURE)->where('RES_STATUS', '=', 'Assigned')->Where('RES_SPK', '!=', $request['RES_SPK'])->distinct()->get();

    if(empty($driverReserved)){
        $driver = vDriver::all();
    }
    else{
        foreach($driverReserved1 as $item1) {
            $driver = vDriver::where("REF_TEXT", "!=", $item1['RES_DRIVER'])->get();
        }

    }

这是我执行 print_r($dirverReserved1);die; 的时候。里面有2个driver

Illuminate\Database\Eloquent\Collection Object ( [items:protected] => Array ( [0] => App\Reservation Object ( [timestamps] => [primaryKey:protected] => RES_ID [table:protected] => RESERVATION [connection:protected] => [perPage:protected] => 15 [incrementing] => 1 [attributes:protected] => Array ( [RES_DRIVER] => Asim ) [original:protected] => Array ( [RES_DRIVER] => Asim ) [relations:protected] => Array ( ) [hidden:protected] => Array ( ) [visible:protected] => Array ( ) [appends:protected] => Array ( ) [fillable:protected] => Array ( ) [guarded:protected] => Array ( [0] => * ) [dates:protected] => Array ( ) [dateFormat:protected] => [casts:protected] => Array ( ) [touches:protected] => Array ( ) [observables:protected] => Array ( ) [with:protected] => Array ( ) [morphClass:protected] => [exists] => 1 [wasRecentlyCreated] => ) [1] => App\Reservation Object ( [timestamps] => [primaryKey:protected] => RES_ID [table:protected] => RESERVATION [connection:protected] => [perPage:protected] => 15 [incrementing] => 1 [attributes:protected] => Array ( [RES_DRIVER] => Sulhi Mukhlas ) [original:protected] => Array ( [RES_DRIVER] => Sulhi Mukhlas ) [relations:protected] => Array ( ) [hidden:protected] => Array ( ) [visible:protected] => Array ( ) [appends:protected] => Array ( ) [fillable:protected] => Array ( ) [guarded:protected] => Array ( [0] => * ) [dates:protected] => Array ( ) [dateFormat:protected] => [casts:protected] => Array ( ) [touches:protected] => Array ( ) [observables:protected] => Array ( ) [with:protected] => Array ( ) [morphClass:protected] => [exists] => 1 [wasRecentlyCreated] => ) ) )

但是当我在 foreach 中执行 print_r($item1['RES_DRIVER']);die; 时,它只显示 1 个名为 Asim 的 driver。

我认为你正在使用 driver 的名称来处理所有这些事情,但如果你使用了 ID 那么它会更好。

无论如何,

我认为你应该在你的代码中使用 pluckwhereNotIn 来解决这样的问题,

$driverReserved1 的查询更改为

$driverReserved1 = Reservation::select("RES_DRIVER")->where("RES_RETURN", '>', $reservation[0]->RES_DEPARTURE)->where('RES_STATUS', '=', 'Assigned')->Where('RES_SPK', '!=', $request['RES_SPK'])->distinct()->pluck('RES_DRIVER');

这将为您提供一组不同的 driver 保留名称。现在,使用 whereNotIn 你可以获得 driver,而不是像这样预订 driver,

if(empty($driverReserved)){
    $driver = vDriver::all();
}
else{
        $driver = vDriver::whereNotIn("REF_TEXT",$driverReserved1)->get();
}

我认为这对你的情况有用。

希望你明白。

先看看Laravel Collection功能还不错

其次,代码是正确的,输出也是正确的:D

你只是期望错误的输出

    foreach($driverReserved1 as $item1) {
        $driver = vDriver::where("REF_TEXT", "!=", $item1['RES_DRIVER'])->get();
    }

这里你刚刚说最后一条记录将保存在 $driver 中所以你需要它们都在你可能使用的驱动程序中

array_merge($firstArray,$secondArray);

在你这里的例子中它会像

foreach($driverReserved1 as $item1) {
        $driver = array_merge($driver ,vDriver::where("REF_TEXT", "!=", $item1['RES_DRIVER'])->get());
    }

当然还有在

之前分配驱动程序