Yii2模型获取包含下划线的字段的方法

时间:2018-08-08 14:11:58

标签: model yii2 getter-setter

型号名称:listing; 字段名称:contact_name

涉及到用户输入,因此我想使用getContactName的某些变体来一致地格式化输出,即,对$model->contact_name的任何调用都将返回格式化的输出。是的,例如,我可以使用getContactName$model->contactName,但是我没有找到可以与默认getcontact_name一起使用的$model->contact_name的任何变体。

我知道我可以配置Gii来创建一些附加功能以及其他各种解决方法,但是我对一个像样的Google感兴趣的是是否有一个简单的解决方案。

2 个答案:

答案 0 :(得分:2)

您可以为所需的模型覆盖afterFind()方法并覆盖默认值,或将默认值格式化为所需的格式。 您可以通过将以下内容添加到模型Listing中来覆盖该方法。

让我们说说,我们需要格式化默认联系人姓名,该姓名与表中的rich-harding一样保存,我们将其格式化为Rich Harding

public function afterFind() {
    parent::afterFind();
    $names=explode("-",$this->contact_name);
    $this->contact_name=implode(" ", array_map('ucfirst',$names));
}

答案 1 :(得分:2)

如果您已经具有以getContact_name()为名称的属性(或常规对象属性),则

contact_name将不起作用。来自数据库的属性优先于getter / setter-您可以在__get() source code中看到。如果您拥有具有该名称的不动产,显然__get()将永远不会被调用。因此,将按以下顺序搜索值:

  1. Object properties
  2. 数据库中的属性。
  3. 字母/字母(包括关系)。

您应该使用不同的名称(contactName),或者使用afterFind事件进行格式化或覆盖__get()来更改数据源的顺序(这可能很棘手)。您可能也对this PR感兴趣。