无法在laravel访问器中获取属性10月CMS

问题描述

我目前正在使用October CMS开发一个项目,并尝试将标记列表与关系数据一起使用。 而且我正在使用自定义访问器从两列中获取全名,这似乎很常见。

但是我只是无法在访问器中获取模型的属性

这是我的代码...

class NameOfClass extends Model
{
    /** ALL THE CODE GENERATED BY OCTOBER CMS PLUGIN BUILDER */

    public function getFullNameAttribute()
    {
        return $this->firstname." ".$this->lastname;
    }
}

并在field.yml文件调用访问器...

fieldName:
  label: FieldName
  descriptionFrom: description
  type: taglist
  mode: relation
  nameFrom: full_name
  customTags: false

我可以看到访问器被调用得很好,因为我可以通过将返回值更改为纯字符串来获取值。

我花了很多时间研究解决方案……有什么主意吗?

我正在使用octobercms docker官方映像的最新版本进行开发。

解决方法

由于内部代码,因此不可能。所以我建议不要尝试解决它。它不能解决:)尝试替代方法

为什么?

由于代码标记列表的设计方式使其可以与TAGS一起使用。 如果有allow to create new tags,则它将no selected tag;如果存在标签,则将attache移至给定的记录。这一切都可以与real attributes一起使用。

因此它不能设计为使用虚拟属性。

有关更多详细信息,这是代码如何生成标签的代码

public function getFieldOptions()
{
    $options = $this->formField->options();

    if (!$options && $this->mode === static::MODE_RELATION) {
        $options = RelationBase::noConstraints(function () {
            $query = $this->getRelationObject()->newQuery();

            // Even though "no constraints" is applied,belongsToMany constrains the query
            // by joining its pivot table. Remove all joins from the query.
            $query->getQuery()->getQuery()->joins = [];

            return $query->lists($this->nameFrom); // <==== LOOK HERE
        });
    }

    return $options;
}

您可以看到此nameFrom被直接传递给查询,而query/sqlnot know about our virtual field不能正常工作。

您也可以使用RelationController Behaviors
参考:https://octobercms.com/docs/backend/relations#introduction

如有疑问,请发表评论。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...