雄辩的关系在json输出中不必要地重复关系名称

时间:2019-06-27 12:15:06

标签: json laravel eloquent

我正在雄辩地进行一段关系,但没有得到想要的Json。我正在使用这样的东西:

 return User::with('permissao.telaSistema')->find(26);

正在产生以下json:

 {
    "id" : 1000,
    "total_operadores": null,
    "permissao": [
        {
            "tela_sistema": [
                {
                    "id": 7,
                    "nome_tela": "generic mkt"
                }
            ]
        },
        {
            "tela_sistema": [
                {
                    "id": 6,
                    "nome_tela": "generic mkt2"
                }
            ]
        }
    ]
}

生成这样的东西是否更明智:

{
"id": 1000,
"total_operadores": null,
"permissao": [
    {
        "tela_sistema": [
            {
                "id": 7,
                "nome_tela": "generic mkt"
            },

            {
                "id": 6,
                "nome_tela": "generic mkt 2"
            }
        ]
    }
]

}

我想知道不是我对模型的关系声明有问题。这是我的模特。

class User {
    public function permissao(){
        return $this->hasMany('App\Permissao', 'operador_id', 'id');
    }

}

Permissao类

Class Permissao
  {
    public function user() {

        return $this->belongsToOne('App\User', 'id', 'operador_id');

    }

    public function telaSistema() {

        return $this->hasOne('App\TelaSistema', 'id', 'tela_id');

    }

}

Telas气管病

TelaSistema class
 {
    public function permissao()
    {
        return $this->belongsToMany('App\Permissao', 'id', 'tela_id');
    }
}

这是表格的结构。

 User                      Permissao                    Tela_sistema
    id  (one) -> (many)     operador_id         
                              tela_id     (many) -> (one)        id

1 个答案:

答案 0 :(得分:0)

我做到了!我使用了“通过很多”。

     public function telaSistema()
     {
        return $this->hasManyThrough('App\TelaSistema', 'App\Permissao', 'operador_id', 'id', 'id' ,'tela_id');
     }

我不知道我是否正确地提供了参数,但显然可以。

 {
    "id" : 1000,
    "total_operadores": null,

    "tela_sistema": [
        {
            "id": 7,
            "nome_tela": "generic mkt",
            "operador_id": 26
        },
        {
            "id": 6,
            "nome_tela": "generic mkt2",
            "operador_id": 26
        }
    ]
}