Laravel,当数据库为空时,I';我得到了错误,否则不是,但我必须使用这个

Laravel,当数据库为空时,I';我得到了错误,否则不是,但我必须使用这个,laravel,undefined,offset,Laravel,Undefined,Offset,使用此代码时,如果数据库为空,则得到未定义的偏移量:0。你怎么能写这个?我应该使用if或类似的工具吗?真的吗?你应该正确地配置你的关系,这样你就可以 $employee = Employee::where('user_id', Auth::user()->id)->get(); foreach (Company::all() as $company) { if ($com

使用此代码时,如果数据库为空,则得到未定义的偏移量:0。你怎么能写这个?我应该使用if或类似的工具吗?

真的吗?你应该正确地配置你的关系,这样你就可以

        $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',
                                ]
                            ]
                        ]);
                    }
                }
但在您的情况下,您可以将第一行更改为

$companies = Company::all();

foreach($companies as $company){

    foreach($company->employees as $employee){

        if($employee->active){
          ....
        }   

    }

}

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

@Joe解决方案是正确的。您可以快速加载公司和员工,以避免N+1查询问题。这个案例有一个官方的例子:

您应该将所有的
$company
逻辑放在一个简单的
empty
检查
如果(!empty($employee)){//那么您的$employee[0]逻辑将有意义}
我应该放在if(!empty($employee))中吗{在foreach内部还是外部?您在这里的逻辑是什么?如果连接用户的公司将
employee\u active
属性设置为1=>add-in菜单?循环遍历所有公司,然后获取所有员工,这是一个糟糕的解决方案。
 $employee = Employee::where('user_id', Auth::user()->id)->first();