【问题标题】:How to define an accessor in model where the field name contains a number?如何在字段名称包含数字的模型中定义访问器?
【发布时间】:2018-09-18 09:09:09
【问题描述】:

我试图在我的用户模型中为一个已经存在的字段定义一个访问器。此字段在我的数据库中称为 address_line_1。但是,由于字段名称包含一个数字,我不确定如何让 Laravel 识别“行”之后有一个下划线。

通常要定义下划线,你会使用驼峰式大小写,但在这种情况下你不能。我已经检查了 Laravel 文档,但是没有提到这个问题。以下是我目前的代码:

public function getAddressLine1Attribute($value){
    return empty($value) ? '' : decrypt($value);
}

我也试过函数名getAddress_Line_1AttributegetAddressLine_1Attribute 但这不起作用。

我该如何解决这个问题?

【问题讨论】:

  • 那么当您使用$model->address_line_1 时,它不是在解密它吗?
  • @ThomasEdwards 如果 address_line_1 为空,则不会尝试对其进行解密。我遇到的问题是我无法让这个属性工作,因为我无法让这个属性识别address_line_1。我可以通过创建一个名为 address_line_one 的属性并专门以这种方式访问​​ address_line_1 来解决这个问题,但我更喜欢只覆盖当前字段。
  • @ThomasEdwards 我在整个用户模型中都有类似的属性(例如,zip_code 工作正常,因为该字段的名称中不包含数字。
  • 别担心,只是想确定您使用的是address_line_1 在视图中打印它,而不是getAddress_Line_1。你试过getAddressLine_1Attribute作为方法名吗?
  • @ThomasEdwards 编辑:不,那没有用。出于测试目的,我添加了return "test"; 以查看该字段是否甚至被覆盖,但事实并非如此。

标签: php laravel laravel-5


【解决方案1】:

Laravel 5.7 调用这个函数来检查 get mutator 是否存在:

 /**
 * Determine if a get mutator exists for an attribute.
 *
 * @param  string  $key
 * @return bool
 */
public function hasGetMutator($key)
{
    return method_exists($this, 'get'.Str::studly($key).'Attribute');
}

'get'.Str::studly('address_line_1').'Attribute' === 'getAddressLine1Attribute'

看来你的方法名是正确的。

【讨论】:

  • 是的,现在似乎可以工作了,不知道之前出了什么问题,但是感谢您确认这是正确的方法。
  • 刚刚做了同样的测试,也得到了getAddressLine1Attribute
猜你喜欢
  • 2022-12-24
  • 2021-09-19
  • 2016-07-26
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2011-01-26
  • 2012-05-08
相关资源
最近更新 更多