Laravel toArray()中缺少延迟加载关系

Laravel toArray()中缺少延迟加载关系,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,拉威尔5.8 我懒得加载一个与crmaccount对象有一对一关系的相关客户的用户 这些模型工作正常,因此当我检索急切加载的实体时,它会显示所有嵌套关系 一行之后,我对该对象使用了“toArray()”方法,输出缺少第三级关系 关于“crmaccount”-模型,唯一一件可能有点特殊的事情是,它包含一个json列,必须强制转换 知道这是怎么回事吗 所有这些都发生在中间件中。如果与或加载一起使用,则没有区别 public function handle($request, Closure $n

拉威尔5.8

我懒得加载一个与crmaccount对象有一对一关系的相关客户的用户

这些模型工作正常,因此当我检索急切加载的实体时,它会显示所有嵌套关系

一行之后,我对该对象使用了“toArray()”方法,输出缺少第三级关系

关于“crmaccount”-模型,唯一一件可能有点特殊的事情是,它包含一个json列,必须强制转换

知道这是怎么回事吗

所有这些都发生在中间件中。如果与或加载一起使用,则没有区别

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'];