首页 > 解决方案 > Laravel 如何在 eloquent 模型中使用值而不是完整对象与连接

问题描述

当我称雄辩时:

$user = User::where('idUser', 1)->with(['privilege'])->first()->toArray();

它给了我:

{
    "idUser": 1,
    "name": "UserName",
    "email": "UserName@gmail.com",
    "image": "https://image.com",
    "createdAt": "2019-05-07 15:43:47",
    "privilege": {
        "idPrivilege": 1,
        "name": "user"
    }
}

当我调用 Eloquent 时:

$user = User::where('idUser', 1)->with(['privilege:name'])->first()->toArray();

json 中的元素privilege设置为null,但是当我调用时:

$user = User::where('idUser', 1)->with(['privilege:idPrivilege,name'])->first()->toArray();

和第一次通话一样。如何将 element 设置privilege为 fe user(我只想要一个简单的值而不是 的完整对象Privilege)?

我可以使用类似的东西:

$user['privilege'] = $user['privilege']['name']; 

但是这个看起来不太好看!

使用资源:

public function toArray($request)
    {
        return [
            'idUser' => $this->idUser,
            'name' => $this->name,
            'email' => $this->email,
            'privilege' => $this->privilege['name'],
            'createdAt' => $this->created_at,
        ];
    }

在控制器中:

$user = User::where('idUser', 1)->with('privilege')->first();
return UserResource::make($user);

给出:

{
"data": {
"idUser": 1,
"name": "UserName",
"email": "UserName@gmail.com",
"privilege": "user",
"createdAt": "2019-05-07 15:43:47"
}
}

我怎样才能返回 object 而不是 data{object} ?

标签: phplaraveljoineloquentmodel

解决方案


HCK的回答所述,您可以使用

$user = User
        ::where('idUser', $id)
        ->with(['privilege' => function($query) {
            return $query->select('name');
        }])
        ->first()
        ->toArray();

得到你需要的东西。现在,如果您已经在使用API Resources并且想要删除外部data对象,您可以在您的方法中添加以下内容AppServiceProvider boot

use Illuminate\Http\Resources\Json\Resource;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Perform post-registration booting of services.
     *
     * @return void
     */
    public function boot()
    {
        Resource::withoutWrapping(); // With this, your resources won't have the
                                     // outter data wrapping

    }
}

只需看看文档


推荐阅读