PHP错误:未定义属性:IlluminateDatabaseEloquentCollection::$ retai


PHP error: Undefined property: IlluminateDatabaseEloquentCollection::$retails

你好,我想让我的对象在laravel像这样。

但是我得到这个错误。

PHP error:  Undefined property: Illuminate'Database'Eloquent'Collection::$retails on line 18

这是我的代码。

public function index(){
        $retails = Auth::user()->companies->retails->all();

        return view('retails/retails', compact('retails'));
    }

公司模型
class Company extends Model
{
    public function retails(){
        $this->hasMany(Retail::class);
    }
}

零售模式

class Retail extends Model
{
    public function company(){
    return $this->belongsTo(Company::class);
    }
}

你有很多公司。这就是为什么你从

得到一个集合

Auth::user()->companies

当您从集合实例调用->retails时,您将得到您编写的异常。

你必须为这些公司加载零售数据,然后在它们之间循环。

:

$u = auth()->user();
$u->load('companies.retails');
$userRetails = [];
$u->companies->each(function($company) use (&$userRetails) {
    $userRetails = array_merge($userRetails, $company->retails->toArray());
});
$userRetails = collect($userRetails);
return view('retails/retails', compact('userRetails'));

根据你的代码,你试图从一个不可能的集合访问集合,你应该单独获取一个集合,首先做你的过程

public function index(){
    $companies = Auth::user()->companies;

    foreach($companies as $company) {
        $retails_arr[] = $company->retails;
    }
    $retails = collect($retails_arr); // Gives Collection or
    // Or if you want to send array, try this
    $retails = $retails_arr; // Gives Array

    return view('retails/retails', compact('retails'));
}