从查询 laravel obj['pivot'] 中删除 obj

问题描述 投票:0回答:3

我的查询,我正在使用 laravel 权限 spatie。 因为我需要显示数据,它将返回相同的格式。并且不需要显示枢轴。 如果你看到的话,枢轴是员工->用户->角色->枢轴

public function index()
{
    $resp = Employes::where('estado', 1)
    ->with('user.roles:id,name')
    ->get();

    return  response()->json($resp);
}

回应

 [
   {
      "employ":"Juan",
      "age":21,
      "user":{
         "id":5,
         "name":"mario maradionio",
         "email":"[email protected]",
         "tipo_usuario":null,
         "roles":[
            {
               "id":1,
               "name":"root",
               "pivot":{
                  "model_id":5,
                  "role_id":1,
                  "model_type":"App\\User"
               }
            },
            {
               "id":2,
               "name":"Alumno",
               "pivot":{
                  "model_id":5,
                  "role_id":2,
                  "model_type":"App\\User"
               }
            },
            {
               "id":3,
               "name":"Encargado",
               "pivot":{
                  "model_id":5,
                  "role_id":3,
                  "model_type":"App\\User"
               }
            }
         ]
      }
   ]

型号 使用 Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{   
    use Notifiable;
    use HasRoles;
}

使用集合不显示角色,只显示一个角色,并且角色的名称为空

[
            'id'         => $this->id,
            'employe'       => $this->name,
            'user' => [
               'id' => $this->id,
               'name' => $this->name,
               'roles' => [
                    'id' => $this->id,
                    'name' => $this->name
               ]
            ]
        ];
php laravel eloquent laravel-permission
3个回答
2
投票

在您的

Role.php
模型中添加隐藏属性

创建一个

Role.php
并扩展然后
Spatie\Permission\Models\Role

<?php

namespace App\Models;

use Spatie\Permission\Models\Role as BaseRole;

class Role extends BaseRole
{
    use HasFactory;

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'pivot'
    ];

}

参考链接https://laravel.com/docs/8.x/eloquent-serialization#hiding-attributes-from-json


0
投票

您应该创建一个 Resource 类并返回它。

public function index()
{
    $employees = Employes::where('estado', 1)
        ->with('user.roles')
        ->get();

    return EmployeeResource::collection($employees);
}

创建资源可以参考文档:https://laravel.com/docs/8.x/eloquent-resources


0
投票

https://stackoverflow.com/a/65606436/5698198

上面的这个解决方案几乎是正确的。 您只需要更改 config/permission.php 中的模型定义

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.