你好,我想让我的对象在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'));
}