gpt4 book ai didi

laravel - Laravel 所有请求中的附加属性

转载 作者:行者123 更新时间:2023-12-05 00:40:17 51 4
gpt4 key购买 nike

美好的一天。例如,我有一个带有字段/属性的模型 People:

name
surname

而且模型也有这个方法:

public function FullName()
{
return "{$this->name} {$this->surname}";
}

如果我提出下一个请求:

$p = $people->all();

我将收集带有姓名和姓氏作为属性的集合我如何为 all() 请求中的每个函数执行函数?

最佳做法是什么?

最佳答案

那要看你想要什么样的结果了。


选项 A:在数组的所有项目中包含 namesurnamefull_name

Eleazar 的回答是正确的,但有点不完整。

1。在模型中定义一个新的访问器。

这将在您的模型中定义一个新属性,就像 namesurname 一样。定义新属性后,您只需执行 $user->full_name 即可获取该属性。

作为 documentation说,要定义访问器,您需要在模型中添加一个方法:

// The function name will need to start with `get`and ends with `Attribute`
// with the attribute field in-between in camel case.
public function getFullNameAttribute() // notice that the attribute name is in CamelCase.
{
return $this->name . ' ' . $this->surname;
}

2。将属性附加到模型

这将使该属性被视为与任何其他属性一样,因此每当调用表的记录时,该属性将被添加到记录中。

要完成此操作,您需要在模型的 protected $appends 配置属性中添加这个新值,如 documentation 中所示。 :

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
/**
* The accessors to append to the model's array form.
*
* @var array
*/
// notice that here the attribute name is in snake_case
protected $appends = ['full_name'];
}

3。确保此属性 可见

请注意 docs 的这一重要部分:

Once the attribute has been added to the appends list, it will beincluded in both the model's array and JSON representations.Attributes in the appends array will also respect the visible andhidden settings configured on the model.

4。查询您的数据。

执行以下操作时:

$p = $people->all();

$p 数组应具有 namesurname 以及每个项目的新 full_name 属性。


选项 B:只为特定目的获取 full_name。

查询时可以做如下操作,对每个结果进行迭代获取属性。

现在,您可以使用 foreach 语句来迭代集合,但考虑到无论何时查询数据,返回的数组始终是 Collection实例,因此您只需使用 map 函数:

$full_names = $p->map(function ($person) {
// This will only return the person full name,
// if you want additional information just custom this part.
return $person->fullname;
});

使用 collection higher order messages它可以更短:

$full_names = $p->map->fullname;

关于laravel - Laravel 所有请求中的附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978034/

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