我的控制器上有一些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循环,但我不确定如何去做。我尝试了几种方法,但它们都错了。
感谢任何帮助,非常感谢!
答案 0 :(得分:0)
这是因为$bus = BusLine::where('origin', $request->bus)->get();
的输出将始终返回Laravel collection(基本上是一个改进的数组)。但是你在它上面调用->price
,好像它是一个对象。
->get()
将始终返回SQL查询的结果集合。您可以foreach
覆盖它,就好像它是一个数组(它实现iterable
接口)。
->first()
(而不是->get()
)将始终返回对象或null
(如果未找到结果)。