php - 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} ?
解决方案
如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
}
}
只需看看文档!
推荐阅读
- python - 'TypeError: Expected a message Descriptor, got Descriptor' 在尝试导入 keras 时
- java - 在捆绑的运行时中找不到 libjvm.so
- r - 如何绘制一个只有一个变量的平均值和标准差
- javascript - 名称属性在动态添加/删除输入字段功能中不起作用
- python - json.dump 不转储任何东西,给我留下一个空文件| Python
- django - 如何使用信号对其他模型进行更改
- firebase - Flutter Firestore 针对不同客户的不同视图
- google-analytics - Google 标签管理器 - 从另一个标签管理器事件中获取 GA4 事件值
- python - 为什么我不能将 fruits.sort() 分配给排序变量?
- java - 为什么堆数组容量的大小+1