laravel - 在 Laravel 中正确使用访问器

标签 laravel eloquent accessor

我是 Laravel 的新手,正在构建一个简单的 CRUD 应用程序来了解有关该框架的更多信息。我很好奇正确使用访问器。

我认为访问器非常适合格式化模型的属性以在 View 中显示,就像 Angular 中的过滤器一样。目前,我设置了一些访问器来将 char(1) 字段转换为 View 中的完整值,例如将“c”转换为现金或将“f”转换为融资。这是访问器的预期(或可接受的)用途吗?如果是这样,什么是防止访问者格式化绑定(bind)到表单的属性的好方法,例如,在编辑路由中。

例如,我在 db 中将货币金额存储为小数,但使用字符 ($150,00) 对其进行格式化,以便在显示 route 显示。如何防止访问者在填充编辑表单时更改值? (验证将失败,因为输入仅限于数值)。

http://laravel.com/docs/4.2/eloquent#accessors-and-mutators

http://laravel.com/docs/4.2/html#form-model-binding

最佳答案

一切都取决于您的需求。关键是您不需要为实际的列/属性创建访问器。例如,让我们在 DB 中假设您有价格字段。

使用以下代码:

$model = Model::find(1);
echo $model->price;

您可以显示行价格只是为了显示数据库中的数据。

但您也可以为不存在的属性创建访问器:
public function getCurPriceAttribute($value)
{
     return '$ '.($this->price * 1.08); // for example adding VAT tax + displaying currency
}

现在您可以使用:
$model = Model::find(1);
echo $model->price;
echo $model->cur_price;

现在,如果您想将数据放入表单中,您将使用 $model->price允许用户在不使用货币的情况下更改它,并且在您想用货币显示产品值(value)的其他地方,您将使用 $model->cur_price

关于laravel - 在 Laravel 中正确使用访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26573498/

相关文章:

typescript - 私有(private)二传手 typescript ?

javascript - 本地存储中出现损坏的 PDF 文件错误

php - 路线 ID 不起作用

php - 渴望从 Laravel 5.4 中的相关表中的多个值加载第一个项目

laravel-5 - 拉拉维尔 5 : Return all fields except created_at and udpated_at

java - 为什么 Java Bean 需要访问器?

c# - C# 中的回退访问器?

php - AJAX 模式下的验证错误

php - mySQL time sum php now() in laravel seed

php - Laravel使用 Eloquent 关系选择链接表的最后一行