【问题标题】:Laravel, When database is empty I'm getting error otherwise not but I have to use thisLaravel,当数据库为空时,我会收到错误,否则不会,但我必须使用它
【发布时间】:2018-11-09 08:02:39
【问题描述】:
        $employee = Employee::where('user_id', Auth::user()->id)->get();

            foreach (Company::all() as $company)
                {
                    if ($company->id == $employee[0]->company_id && $company->employee_active === 1)
                    {
                        $event->menu->add([
                            'text'        => 'Contracten',
                            'url'         => 'dashboard/contracts',
                            'icon'        => 'file-text',
                            'submenu' => [
                                [
                                    'text' => 'Contract opzetten',
                                    'url'  => 'dashboard/contracts/create',
                                    'icon_color' => 'red',
                                ]
                            ]
                        ]);
                    }
                }

当我使用此代码时,我得到未定义的偏移量:0,如果数据库为空。怎么能得到这个写法?我应该使用 if 还是类似的东西

【问题讨论】:

  • 你应该把你所有的$company逻辑放在一个简单的empty检查if(!empty($employee)){ // then your logic of $employee[0] will make sense }
  • 我应该把 if(!empty($employee)){ 放在 foreach 里面还是外面?
  • 你在这里的逻辑是什么?如果连接用户的公司有 employee_active 属性为 1 => 添加菜单?

标签: laravel undefined offset


【解决方案1】:

@Joe 解决方案是正确的。您可以预先加载公司和员工以避免 N+1 查询问题。这个案例有一个官方的例子: https://laravel.com/docs/5.7/eloquent-relationships#eager-loading

【讨论】:

    【解决方案2】:

    真的,你应该正确配置你的关系,这样你才能做到

    $companies = Company::all();
    
    foreach($companies as $company){
    
        foreach($company->employees as $employee){
    
            if($employee->active){
              ....
            }   
    
        }
    
    }
    

    但在您的情况下,您可以将第一行更改为

     $employee = Employee::where('user_id', Auth::user()->id)->first();
    

    这将返回一个Employee 对象集合而不是一个数组,因此您无需使用[index] 来获取第一个对象。

    【讨论】:

    • 循环遍历所有公司然后找到所有员工是一个糟糕的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多