【问题标题】:laravel custom api resource relationshipslaravel 自定义 api 资源关系
【发布时间】:2021-11-09 03:50:27
【问题描述】:

我有一个查询来获取用户,该表与其他 3 个表相关,但查询有点长,我想处理 JsonResource 但我无法生成 JsonResource在普通查询中使用它。

方法索引:

public function index()
{
    $users = User::select('users.id', 'users.name', 'users.email', 'users.username', 'users.status', 'users.id_cost_center', 'cost_centers.code AS code_cost_center', 'cost_centers.description AS cost_center', 
                          'users.id_dependence', 'dependencies.description AS dependence', 'users.id_profile', 'profiles.name AS profile', 'users.created_at')
                        ->join('cost_centers', 'users.id_cost_center', '=', 'cost_centers.id')
                        ->join('dependencies', 'users.id_dependence', '=', 'dependencies.id')
                        ->join('profiles', 'users.id_profile', '=', 'profiles.id')                            
                        ->orderBy('users.created_at', 'desc')
                        ->get();

    $message = $this->sendResponse($users, 'List of users');

    return $message;
}

我的用户模型中的关系:

public function cost_center()
{
     return $this->belongsTo(CostCenter::class, 'id_cost_center');
}  


public function dependence()
{
    return $this->belongsTo(Dependence::class, 'id_dependence');
}


public function profile() {
    return $this->belongsTo(Profile::class, 'id_profile');
}

其他表中的关系:

成本中心:

public function users()
{
    return $this->hasMany(User::class, 'id_cost_center');
}

依赖:

public function users()
{
   return $this->hasMany(User::class, 'id_dependence');
}

简介:

public function users() 
{
   return $this->hasMany(User::class, 'id_profile');
}

回应:

{
"success": true,
"data": [
    {
        "id": 1,
        "name": "admin",
        "email": "admin@gmail.com",
        "username": "admin",
        "status": 1,
        "id_cost_center": 1,
        "code_cost_center": "001",
        "cost_center": "Admin",
        "id_dependence": 1,
        "dependence": "System",
        "id_profile": 1,
        "profile": "Developer",
        "created_at": "2021-09-13T11:26:46.000000Z"
    },
    {
        "id": 2,
        "name": "user",
        "email": "user@gmail.com",
        "username": "user",
        "status": 1,
        "id_cost_center": 2,
        "code_cost_center": "002",
        "cost_center": "Service",
        "id_dependence": 2,
        "dependence": "Store",
        "id_profile": 2,
        "profile": "Aux",
        "created_at": "2021-09-13T11:26:46.000000Z"
    }
],
"message": "List of users"

}

我试图创建一个用户集合类,但它只生成用户而不是关系:

public function toArray($request)
{
    return [
        'data' => $this->collection,
    ];
}

它只显示用户数据,我希望能够得到与第一次正常查询相同的答案。

【问题讨论】:

    标签: json laravel api


    【解决方案1】:

    你可以做的三件事:

    1. 在调用用户模型时始终返回关系:
    class User extends Model {
    
        protected $with = ['cost_center', 'profile', 'dependence'];
    
        // ...
    }
    

    这将始终返回带有关系的用户。

    1. 仅在使用 toArray 时返回关系。
    public function toArray($request)
    {
        return [
            'data' => $this->collection->with('cost_center'),
        ];
    }
    
    1. 只需在控制器中执行此操作即可。
        $users = User::with('cost_center', 'profile', 'dependance')->get();
    

    【讨论】:

    • 嗨迈克尔,我尝试用方法 3 来做,但它给我带来了所有相关数据,我该怎么做才能让它只显示某些数据,例如:“cost_center”:“ Admin", "dependence": "New" 即如第一个答案所示。有没有办法更好地订购返回我的答案
    • 答案是 2,使用 toArray 并手动构建对象
    猜你喜欢
    • 2021-10-15
    • 2019-06-23
    • 1970-01-01
    • 2018-06-14
    • 2021-03-27
    • 2017-01-05
    • 1970-01-01
    • 2021-06-13
    • 2018-11-30
    相关资源
    最近更新 更多