我正在使用laravel 5.2,我的表单中有一个选择框。选择框用于显示当时可用驱动程序的列表。我只有2名司机,所有的司机都被预订了。但是当我预订驾驶员时,列表上有1个车手。我想我的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个司机。
Illuminate \ Database \ Eloquent \ Collection Object([items:protected] => Array([0] => App \ Reservation Object([timestamps] => [primaryKey:protected] => RES_ID [table :protected] =>保留[connection:protected] => [perPage:protected] => 15 [递增] => 1 [attributes:protected] =>数组([RES_DRIVER] => Asim)[ original:protected] =>数组([RES_DRIVER] => Asim)[关系:受保护] =>数组()[隐藏:受保护] =>数组()[可见:受保护] =>数组() [appends:protected] => Array()[fillable:protected] => Array()[guarded:protected] =>数组([0] => *)[日期:受保护] =>数组( )[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:protecte d] => RES_ID [table:protected] =>预订[connection:protected] => [perPage:protected] => 15 [递增] => 1 [attributes:protected] =>数组([RES_DRIVER] => Sulhi Mukhlas)[原文:protected] =>数组([RES_DRIVER] => Sulhi Mukhlas)[关系:受保护] => Array()[hidden:protected] => Array()[visible:protected] => Array()[appends:protected] => Array()[fillable:protected] => Array()[guarded:protected] =>数组([0] => *)[日期:受保护] => 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;
时,它只显示名为Asim的1个驱动程序。
答案 0 :(得分:1)
我认为你使用驱动程序的名称来处理所有这些事情但是如果你使用了 ID 那么它会更好。
反正
我认为您应该在代码中使用whereNotIn
和$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');
的查询更改为
whereNotIn
这将为您提供保留的不同驱动程序名称数组。现在,使用if(empty($driverReserved)){
$driver = vDriver::all();
}
else{
$driver = vDriver::whereNotIn("REF_TEXT",$driverReserved1)->get();
}
,您可以获得除此之外预订的驱动程序以外的驱动程序,
Flow[(HttpRequest, Seq[String]), (Try[HttpResponse], Seq[String]), Any]
我认为这适合您的情况。
我希望你明白。
答案 1 :(得分:0)
首先检查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());
}
当然在
之前分配驱动程序