添加Laravel循环以避免“未识别的属性”错误

时间:2018-03-13 23:30:01

标签: php laravel

我的控制器上有一些laravel代码:

#Tickets
class PaymentsController extends Controller
{
public function store($event_token, Request $request)
{
if ($event_token != request('event-token')) {
return redirect()->back()->withInput();
}

    $request->validate([
        'first_name' => 'required|min:2',
        'last_name' => 'required|min:2',
        'email' => 'required|email',
        'event-token' => 'required',
        'bus' => 'required',
        'ticket' => 'required',
        'stripeToken' => 'required'
    ]);


    $event = Event::where('event_token', request('event-token'))->firstOrFail();
    $remainingTickets = $event->tickets - $event->sold_tickets;

    $bus = BusLine::where('origin', $request->bus)->get();
    $count = ( request('ticket')+0 >= 1 ) ? request('ticket')+0 : 1;
    $extra = 0;

    if ($remainingTickets < $request->ticket) {
        session()->flash('status', 'danger');
        session()->flash('message', 'OOOPS! It\'s seems that we are officially sold out. Sorry, se you next time!');
        return redirect()->back()->withInput();
    }


    $price = ($event->price + $bus->price) * $count;

最后一行给出了这个错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$price 

我看到了其他答案,我想添加@foreach循环,但我不确定如何去做。我尝试了几种方法,但它们都错了。

感谢任何帮助,非常感谢!

1 个答案:

答案 0 :(得分:0)

这是因为$bus = BusLine::where('origin', $request->bus)->get();的输出将始终返回Laravel collection(基本上是一个改进的数组)。但是你在它上面调用->price,好像它是一个对象。

->get()将始终返回SQL查询的结果集合。您可以foreach覆盖它,就好像它是一个数组(它实现iterable接口)。

例如,

->first()(而不是->get())将始终返回对象或null(如果未找到结果)。