Rok*_*gar 6 php laravel eloquent
我不确定我是否完全理解 Laravel Eloquent 属性转换。根据文档(https://laravel.com/docs/8.x/eloquent-mutators#attribute-casting),这些是支持的类型:
整数、实数、浮点、双精度、小数:、字符串、布尔值、对象、数组、集合、日期、日期时间、时间戳、加密、加密:对象、加密:数组和加密:集合
到目前为止,我只在模型上使用了日期转换(当字段作为时间戳存储在数据库中时),如下所示:
protected $dates = [
'modified_at', 'published_at'
];
Run Code Online (Sandbox Code Playgroud)
我还了解当值存储为整数(0 或其他)时需要将属性转换为布尔值。
但是对于其他属性类型(例如整数),我应该始终进行属性转换吗?或者只是当数据库中的字段属于不同类型时?其他属性的用例是什么或最佳实践是什么?
(例如,我无法想象在迁移中创建一个字符串字段,然后将其中的一些数字保存为字符串,然后将其转换回模型上的整数?)
Ken*_*rna 14
默认情况下,属性将被转换为表中定义的列类型。因此,如果您的列是整数,那么它将被转换为int.
但是,如果您想修改特定字段的此行为,会发生什么情况?这就是属性转换登场的时候。
例如,假设我们有一个名为type 的projects列的表,我们可以在其中存储每个项目的附加配置元素。configjson
就我而言,能够将这些数据作为array. 因此,我们可以只处理一个简单的 ,而不是接收一个stringor 。为此,我们只需:objectarray
class Project extends Model
{
// ...
protected $casts = [
'config' => 'array',
];
// ...
}
Run Code Online (Sandbox Code Playgroud)
这样,每当我们使用 Eloquent 从数据库中获取项目时,每条记录都将具有该属性作为array. 而且,json当尝试存储/更新记录时,它将被转换回。
当然,与您指定的情况相关(将元素保存为 astring但然后将其检索为 an )是完全可能的。integer您需要为该字段设置访问器和修改器。对于名为 的属性number:
/**
* This will be called when fetching the element.
*/
public function getNumberAttribute($value)
{
return (int)$value;
}
/**
* This will be called when storing/updating the element.
*/
public function setFirstNameAttribute($value)
{
$this->attributes['number'] = (string)$value;
}
Run Code Online (Sandbox Code Playgroud)
现在,有理由需要这样做吗?好吧,您可能正在处理一个设计不正确的数据库,或者正在处理一个由多个系统使用的生产数据库,并且数据库中的更改很难完成。在这些情况下,您可以利用这种值操作在您的应用程序中按您想要的方式工作。
| 归档时间: |
|
| 查看次数: |
27330 次 |
| 最近记录: |