修剪Laravel中所有Eloquent模型的所有字符串属性



我使用Laravel(+Eloquent Models(连接到一个遗留数据库。

我的模型的字符串属性用空格填充。(由于数据库中的数据(

当前输出(为了可读性,以JSON形式(如下所示:

{
"THIRDNAME": "Company                               ",
"THIRDNAME2": "",
"THIRDADDR": "Street Of Company 117/1                                          ",
"THIRDADDR2": "",
"THIRDZIP": "1740      ",
"THIRDCITY": "TERNAT                                  "
}

我无法更改该数据库(其他使用它的遗留工具(,但我希望在查询数据库时更改这些属性。(使用Eloquent模型(

得到这样的东西:

{
"THIRDNAME": "Company",
"THIRDNAME2": "",
"THIRDADDR": "Street Of Company 117/1",
"THIRDADDR2": "",
"THIRDZIP": "1740",
"THIRDCITY": "TERNAT"
}

Laravel文献提到";突变体&铸造";但它需要给定特定的字段进行强制转换。

我想申请一个自定义的";铸造";或";突变子";(基本TRIM操作(到所有型号的所有字符串属性。

你将如何在拉拉威尔实现这一点?

感谢

特定于型号,您可以覆盖hydrate((方法:

class MyModel extends Model
{
use HasFactory;
protected $fillable = [
// ... //
];
public function hydrate(array $objects): Collection
{
return parent::hydrate(
array_map(function ($object) {
foreach ($object as $k => $v) {
if (is_string($v)) {
$object->$k = trim($v);
}
}
return $object;
}, $objects)
);
}  
}

如果你想将其应用于所有模型,你可以用一个抽象类来扩展Model,覆盖那里的水合物,并将其作为你的基础模型。

这是因为IlluminateDatabaseEloquentBuilder在从数据库检索的列上调用该方法。如果您使用的是较旧的PHP版本,请记住删除方法返回签名。

最新更新