gpt4 book ai didi

laravel - 如何更改 laravel 关系的结果

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

我在 laravel 中有一个一对一的关系,如下所示:

public function Category()
{
return $this->belongsTo(Categories::class);
}

并运行这个 Eloquent 查询:

Product::with('category')->first();

此查询返回:

{
"name": "Green Book",
"category": {
"id": 1,
"name": "Book"
}
}

但我去了这个数据:

{
"name": "Green Book",
"category": "Book"
}

是否可以在不使用循环的情况下做到这一点?

最佳答案

首先,您似乎有一个 1-X 关系,但您错误地将其用作多对一关系。你的 belongsTo 应该是 hasOne 因为你的项目有一个类别而不是相反。

您可以使用 $appends 属性来附加自定义字段并使其表现得好像它是模型的一部分:

重命名您的关系并添加一个修改器和访问器:

public function categoryRelationship()
{
return $this->hasOne(Categories::class);
}

public function getCategoryAttribute() {
return $this->categoryRelationship->name;
}

public function setCategoryAttribute($value) {
$this->categoryRelationship->name = $value;
}

您还可以选择添加事件以在保存模型时自动保存您的关系,以确保它透明地工作:

protected static function booted()
{
static::saving(function ($myModel) {
$myModel->categoryRelationship->save();
});
}
}

最后,您添加 $appends 属性以确保您的新属性始终包含在模型中,就像它是 native 属性一样。

protected $appends = [ 'category' ];

// This is so you don't end up also showing the relationship
protected $hidden = [ 'categoryRelationship' ];

关于laravel - 如何更改 laravel 关系的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61285337/

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