Php 如何跳过null并在laravel中执行查询?

Php 如何跳过null并在laravel中执行查询?,php,laravel,Php,Laravel,我想,如果用户已订阅id为8的计划,他应该收到错误,他不能订阅。如果没有,他应该可以订阅。我尝试了下面的代码。但当用户在表中没有记录时,它就不能工作。它给出错误$sit=>null我希望它应该跳过检查null或NOTNULL。并且只关注计划id 8 public function newbonus() { $sit = Deposit::where('user_id', Auth::user()->id)->first(); if($sit->plan_id

我想,如果用户已订阅id为8的计划,他应该收到错误,他不能订阅。如果没有,他应该可以订阅。我尝试了下面的代码。但当用户在表中没有记录时,它就不能工作。它给出错误$sit=>null我希望它应该跳过检查null或NOTNULL。并且只关注计划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);
       }
}
你可以用

if(optional($sit)->plan_id == 8)
这样,您就有了一个空的存款模型,因此会出现null异常dosnt


关于。

那么,如果Id为8,或者如果Id为空,您希望能够进入控制结构吗?如果没有结果,整个变量为null,您会发现自己正在寻找某个不是对象的对象的属性

有几种方法可以解决这个问题,你自己选吧。首先,有趣的是,有说服力的收集结果只是常规收集的产物$model->first告诉Eloquent\Builder点击MySql只获得一个结果$model->get告诉我们获取所有结果并返回一个集合。这意味着$model->first和$model->get->first在逻辑上是相同的,第二行可能会影响数据库性能。可能是一个性能良好的打击。在您的例子中,虽然您正在查询一个可能只能返回一个结果的Id字段。因此,通过先点击集合,而不是先点击雄辩的\Builder,您可以访问它对默认值的支持:

$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);
在这两种情况下,都是在一个空模型中进行dummying,以代替缺少的结果,因此$sit->plan_id将返回null,而不是抛出一个$sit本身为null的错误

最后,您可以添加一个新的if条件:

if(is_null($sit) || $sit->plan_id == 8){
这里唯一的缺点是如果控件结构的内容也希望$sit是一个对象


我个人的偏好是选项2。

如果$sit->plan_id==8,则更改为if!是不是空$sit&&$sit->plan\u id==8,何时为空?意思是当用户在该表中没有记录时,如果为空,则意味着用户没有任何存款记录,因此他没有任何计划\u id 8i需要它在为空和不为空时都应该工作。有记录的代码用户可以再次订阅未定义的函数App\Http\Controllers\optional