gpt4 book ai didi

json - 只从 hasOne 关系中获取字符串

转载 作者:行者123 更新时间:2023-12-04 19:53:51 24 4
gpt4 key购买 nike

我有两个模型:

a) 食谱b) 用户

每个食谱都有一个用户。当 (REST) 请求食谱时,我还想在我的 JSON 答案中获取相关用户的名称,如下所示:

{
"id": 1,
"user_id": 1,
"name": "Recipe Name",
"description": "Description goes here",
"userName": "Testuser"
}

我得到的是:

{
"id": 1,
"user_id": 1,
"name": "Recipe Name",
"description": "Description goes here",
"userName": "Testuser",
"user": {
"id": 1,
"name": "Testuser",
"email": "mail@example.com"
}
}

这是我在 RecipeController 中的功能:

public function show($id) {
$recipe = Recipe::find($id);
$recipe->userName = (string) $recipe->user->name;

return $recipe;
}

我的食谱模型具有以下属性和 setter/getter :

protected $userName = null;

public function setUserName($userName) {
$this->userName = $userName;
}

有趣的是,当使用此代码片段时,我还将整个用户对象作为 JSON 字符串作为 Recipe JSON 字符串的一部分:

public function show($id) {
recipe = Recipe::find($id);
$recipe->user->name;

return $recipe;
}

所以在我的属于配方的用户对象的调用中发生了一些神奇的事情。

最佳答案

您必须将您的关系方法名称添加到您的 Recipe 模型中的 $hidden 属性数组中,以将其从 json 结果中删除。

https://laravel.com/docs/5.1/eloquent-serialization#hiding-attributes-from-json

class Recipe extends Model
{
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = ['user'];

/**
* The appended attributes shown in JSON results.
*
* @var array
*/
protected $appends = ['username'];

/**
* The username attribute accessor for JSON results.
*
* @var string
*/
public function getUsernameAttribute()
{
return $this->user->name;
}
}

我认为除了形成您自己的 JSON 结果集之外,没有其他方法可以动态地执行此操作。

您还可以将 $hidden 属性添加到您的 User 模型以从 JSON 结果中删除您想要隐藏的用户属性?这将允许您在不返回敏感信息的情况下利用序列化关系模型。

关于json - 只从 hasOne 关系中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38055152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com