Eloquent 构建器实例上不存在属性

2 php laravel eloquent

我有一张events桌子和一张tickets桌子。我正在尝试regular_atendies通过订购的门票来减少可用门票,对于vip

这是我的存储方法:

// 创建票证

$ticket = new Ticket();
$ticket->userName = $request->input('userName');
$ticket->userEmail = $request->input('userEmail');
$ticket->phoneNumber = $request->input('phoneNumber');
$ticket->regular_quantity = $request->input('regular_quantity');
$ticket->vip_quantity = $request->input('vip_quantity');
$ticket->event_id = $request->route('id');
$ticket->total = $request->input('regular_quantity') + $request->input('vip_quantity');

$event = Event::find(1);
$event = Event::where('id',$ticket->event_id);

if ($ticket->regular_quantity<$event->regular_attendies) {
    DB::table('events')->decrement('regular_attendies', $ticket->regular_quantity);
} elseif ($ticket->vip_quantity<$event->$vip_attendies) {
    DB::table('events')->decrement('vip_attendies', $ticket->vip_quantity);  
} else {
    echo "error";
}

$ticket->save();

return redirect('/');
Run Code Online (Sandbox Code Playgroud)

Tim*_*wis 7

你永远不会执行你的查询。这行:

$event = Event::where('id',$ticket->event_id);
Run Code Online (Sandbox Code Playgroud)

需要关闭:

$event = Event::where('id',$ticket->event_id)->first();
// or ->firstOrFail();, etc
Run Code Online (Sandbox Code Playgroud)

否则,它是一个Builder实例,您无法从Builder. 使用->first()会将其转换为Event实例,或者null.

另外,有这个:

$event = Event::find(1);
// ^ I assume this is used for testing, probably should comment it out.
$event = Event::where('id',$ticket->event_id)->first();
Run Code Online (Sandbox Code Playgroud)

是多余的。使用其中之一。