Laravel toArray()中缺少延迟加载关系
拉威尔5.8 我懒得加载一个与crmaccount对象有一对一关系的相关客户的用户 这些模型工作正常,因此当我检索急切加载的实体时,它会显示所有嵌套关系 一行之后,我对该对象使用了“toArray()”方法,输出缺少第三级关系 关于“crmaccount”-模型,唯一一件可能有点特殊的事情是,它包含一个json列,必须强制转换 知道这是怎么回事吗 所有这些都发生在中间件中。如果与或加载一起使用,则没有区别Laravel toArray()中缺少延迟加载关系,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,拉威尔5.8 我懒得加载一个与crmaccount对象有一对一关系的相关客户的用户 这些模型工作正常,因此当我检索急切加载的实体时,它会显示所有嵌套关系 一行之后,我对该对象使用了“toArray()”方法,输出缺少第三级关系 关于“crmaccount”-模型,唯一一件可能有点特殊的事情是,它包含一个json列,必须强制转换 知道这是怎么回事吗 所有这些都发生在中间件中。如果与或加载一起使用,则没有区别 public function handle($request, Closure $n
public function handle($request, Closure $next)
{
$UserData = \Auth::user();
if($UserData){
$User = \App\Login::with(['role','customer','customer.crmaccount'])->find($UserData->id);
dump($User);
dd($User->toArray());
$UserData['isAdmin'] = false;
if($UserData['role']['name'] === 'Admin'){
$UserData['isAdmin'] = true;
}
$request->request->add(['UserData' => $UserData]);
}
return $next($request);
}
登录
在每个型号上,都有一个受保护的$visible=[]代码>和受保护的$hidden=[]
属性。这些属性控制将模型转换为对象
、数组
或json
时可用的属性。这包括关系
,因为Laravel在内部将它们转换为属性,因此从可见
中忽略它们,或将它们包含在隐藏
中,将导致它们不可用
在Customer.php
中:
protected $visible = ['id','name'];
由于crmaccount
不在该数组中,因此只有id
和name
可用。只需将crmaccount
添加到数组中即可处理:
protected $visible = ['id','name', 'crmaccount'];
或者,使用hidden
显式设置您不想显示的属性,如果通过->with()加载关系,则默认情况下将显示。使用(['Role','Customer','Customer.crmaccassad')尝试。
;忽略中介关系可能是一个问题。还要注意的是,关系是camelCase
,因此Role
应该是Role
,而Customer
应该是Customer
crmaccasasad
很好(但可能更清晰)。另外,是否需要使用->toArray()
?$request->request->add()
是否不接受对象
?感谢您的回复。我把列名弄得乱七八糟,结果是“crmaccassad”;-)这些命名约定具体在哪里?我会更新我的模型和报告。所有的文档public function posts()
,public function comments()
等可以是camelCase
或snake\u case
,但避免使用大写(型号名称是StudlyCase
等),尽管它们只是惯例;它们不会引起问题。那么,crmaccasasad
是一个列
还是一个关系
?它看起来应该是第一张图片中的crmacc
。我什么也没说:P尝试将crmaccount
添加到protected$visible
;看看是否包括在内。我不是百分之百地认为财产会影响人际关系,但我认为确实如此。你让我很开心:)我也有这个想法,但就像“哦,他们会在标有红色的文档中声明的那样”。在将方法名或“属性”添加到“母亲”的可见数组(在本例中为“客户”)中之后,它就会工作。请以帖子的形式再次发布您的评论,这样我就可以投票并标记为解决方案。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Crmaccount extends Model{
public $timestamps = false;
protected $visible = ['id','name','crm_system','customer_id','crm_api_config'];
protected $fillable = [
'name','crm_system','customer_id','crm_api_config'
];
protected $casts = [
'crm_api_config' => 'array'
];
public function customer(){
return $this->belongsTo('App\Customer');
}
}
protected $visible = ['id','name'];
protected $visible = ['id','name', 'crmaccount'];