我正在尝试使用L5分页,一切看起来都很好,直到我点击第二页链接。当我点击它时,我收到此错误:
Laravel 5 Pagination未定义的可变车辆
控制器
public function search() {
$vehicle = Vehicle::with('representive','seller','buyer','whoUpdated')->orderBy('created_at', 'desc')->first();;
$previous = Vehicle::where('id', '<', $vehicle->id)->max('id');
$next = Vehicle::where('id', '>', $vehicle->id)->min('id');
$first = Vehicle::orderBy('created_at', 'asc')->first();
$last = Vehicle::orderBy('created_at', 'desc')->first();
//passing rapyd components
$rapydProcess = new RapydController();
$searchFilter = $rapydProcess->createSearchFilter();
$searchGrid = $rapydProcess->createVehicleDataGrid($searchFilter);
$vehicleTrackFilter = $rapydProcess->createVehicleTrackFilter();
$vehicleTrackDataGrid = $rapydProcess->createVehicleTrackDataGrid($vehicleTrackFilter);
//$statisticsDataGrid = $rapydProcess->statisticsDataGrid();
//passing select box contents to view
$clients = Client::lists('full_name', 'id');
$vehicleTypes = VehicleType::lists('vehicle_type', 'id');
$sections = Section::lists('section_name', 'id');
$brands = Brand::lists('brand_name', 'id');
$paymentTypes = PaymentType::lists('payment_type', 'id');
$searchOptions = StatisticsSearchOptions::lists('option_name', 'slug');
$option1 = Request::get('option1');
$option2 = Request::get('option2');
$condition = Request::get('condition');
$date_option = Request::get('dateOption');
$option1_value = Request::get('option1_value');
$option2_value = Request::get('option2_value');
$fromDate = Request::get('fromDate');
$toDate = Request::get('toDate');
if (isset($option1_value)) {
$actual_option1 = '';
foreach ($option1_value as $value) {
if ($value != '') {
$actual_option1 = $value;
}
}
}
if (isset($option1_value)) {
$actual_option2 = '';
foreach ($option2_value as $value) {
if ($value != '') {
$actual_option2 = $value;
}
}
}
if($condition == 'no'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->paginate(2);
//return $vehicle;
}
if($condition == 'or'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->orWhere($option2, $actual_option2)->paginate(2);
}
if($condition == 'and'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->where($option2, $actual_option2)->paginate(2);
}
return view('pages.aracislemler', compact('vehicles','condition','option1','option2','actual_option1','actual_option2','vehicle','previous','next','first','last','searchFilter', 'searchGrid', 'vehicleTrackFilter', 'vehicleTrackDataGrid', 'statisticsDataGrid', 'vehicleTypes', 'sections', 'brands', 'clients','paymentTypes','searchOptions'));
//return $vehicles;
}
查看
@if(isset($vehicles))
@foreach($vehicles as $vehicle)
<tr>
<td style="padding: 15px;">{{ $vehicle->id }}</td>
<td style="padding: 15px;">{{ $vehicle->brand_id }}</td>
<td style="padding: 15px;">{{ $vehicle->model }}</td>
<td style="padding: 15px;">{{ $vehicle->type_id }}</td>
<td style="padding: 15px;">{{ $vehicle->licenseplate }}</td>
<td style="padding: 15px;">{{ $vehicle->representive_client_id }}</td>
<td style="padding: 15px;">{{ $vehicle->buyer_client_id }}</td>
<td style="padding: 15px;">{{ $vehicle->seller_client_id }}</td>
<td style="padding: 15px;">{{ $vehicle->debit_situation }}</td>
<td style="padding: 15px;">{{ $vehicle->partner_situation }}</td>
<td style="padding: 15px;"><a href="{{ URL::to( 'pages/vehicles?show=' . $vehicle -> id ) }}">Git</a></td>
</tr>
@endforeach
@endif
{!! $vehicles->appends(['condition' => 'condition','option1' => 'option1','option2' => 'option2','actual_option1' => 'actual_option1','actual_option2' => 'actual_option2'])->render()!!}
作为L5新手,我不知道该怎么办,我该如何解决这个问题呢? 任何帮助将不胜感激。
答案 0 :(得分:1)
您没有将$condition
添加到分页中,因此丢失了。在返回视图(在Controller中)之前的if
语句中,只有在满足$vehicles
时才设置$condition
变量(没有回退),因此它不会传递$vehicles
到视图。设置回退是明智的,如果实际上没有条件,请将$vehicles
变量设置为某个值,否则会导致您遇到的错误。
请注意,您还必须将其传递给您的视图! (你目前没有这样做)
在你的视图中尝试这样的事情:
{!! $vehicles->appends(['condition' => $condition])->render()!!}
并将其添加到您的Controller:
return view('pages.aracislemler', compact('vehicles', 'condition'...
来源:http://laravel.com/docs/5.1/pagination(搜索追加)
编辑(正如评论和@HieuLu所解释的那样:(例如,您可能需要根据需要更改最后else
)
if($condition == 'no'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->paginate(2);
//return $vehicle;
}
elseif($condition == 'or'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->orWhere($option2, $actual_option2)->paginate(2);
}
elseif($condition == 'and'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->where($option2, $actual_option2)->paginate(2);
}
else {
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->paginate(2);
}
答案 1 :(得分:0)
如果查询字符串中没有condition
参数,或者此参数的值不是其中一个值:or
,and
,no
。您的代码中未设置$vehicles
个变量。 compact
函数在之前未定义时忽略变量而不是抛出错误,这会导致视图中出现错误。
任何未设置的字符串都将被跳过。
您需要稍微修改一下代码,选择一个默认值,以确保在将$vehicles
发送到视图之前始终设置它。
if($condition == 'no'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->paginate(2);
//return $vehicle;
} elseif ($condition == 'or'){
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->orWhere($option2, $actual_option2)->paginate(2);
} else {
# default value
$vehicles = Vehicle::with('brand','section','representive','buyer','seller','buyingPaymentType','sellingPaymentType')->where($option1, $actual_option1)->where($option2, $actual_option2)->paginate(2);
}