我想如果用户订阅了ID为8的计划,他应该收到他无法订阅的错误。如果不是他应该订阅。我试过下面的代码。但是当用户在表中没有记录时它无法工作。它给出错误“$sit=>null"
我希望它应该跳过检查null或不为null。并且只关注计划ID 8。
public function newbonus()
{
$sit = Deposit::where('user_id', Auth::user()->id)->first();
if($sit->plan_id == 8){
{
session()->flash('message', 'You have Claimed Free Bonus Already.');
Session::flash('type', 'warning');
Session::flash('title', 'warning');
return redirect()->back();
}else{
$data['general'] = GeneralSetting::first();
$data['site_title'] = $data['general']->title;
$data['basic'] = BasicSetting::first();
$data['page_title'] = "Free Bonus";
$data['payment'] = Payment::first();
$data['plan'] = Plan::whereStatus(1)->get();
return view('user.bonus-new',$data);
}
}
答案 0 :(得分:0)
您可以使用
if(optional($sit)->plan_id == 8)
有了这个,你有一个空的存款模型,所以出现了空的异常dosnt。
问候。
答案 1 :(得分:0)
所以,如果Id为8,或者它是否为null,您希望能够进入控制结构吗?发生的事情是,如果没有结果,整个变量都是null
,并且您发现自己正在寻找不属于对象的属性。
有几种方法可以解决这个问题。首先,有趣的是,Eloquent Collection结果只是常规收藏的孩子。 $model->first()
告诉Eloquent \ Builder只针对一个结果点击MySql。 $model->get()
告诉我要获取所有结果并返回一个Collection。这意味着$model->first()
和$model->get()->first()
在逻辑上是相同的,第二行可能会导致数据库性能下降。 可能一个高性能的打击。在您的情况下,虽然您在Id字段上查询可能只能返回一个结果。因此,通过点击集合first()
而不是Eloquent \ Builder first()
,您可以访问它对默认值的支持:
$sit = Deposit::where('user_id', Auth::user()->id)->get()->first(null, app(Deposit::class));
或者,相同的概念,不同的执行:
$sit = Deposit::where('user_id', Auth::user()->id)->first() ?: app(Deposit::class);
在这两种情况下,您都会使用空模型代替缺席结果,以便$sit->plan_id
返回null
而不是抛出错误$sit
本身就是空的。
最后,您可以添加新的if
条件:
if(is_null($sit) || $sit->plan_id == 8){
这里唯一的缺点是控件结构的内容也期望$sit
成为对象。
我个人的偏好是选项#2。