无法在 laravel 访问器中获取属性(October CMS)

Cannot get attribute in laravel accessor (October CMS)

我目前正在使用 October CMS 开发一个项目,并尝试将 taglist 与关系数据一起使用。 我正在使用自定义访问器从两列中获取全名,这似乎是一种非常常见的情况。

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

这是我的代码...

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 图像最新版本进行开发。

由于内部代码,这是不可能的。所以我建议不要试图解决它。它无法解决:)尝试替代

WHY ??

因为代码 taglist 的设计方式使其可以与 TAGS 一起使用。 如果有 no selected tag,它将 allow to create new tags,如果存在标签,则它将 attache 到给定的记录。这一切都适用于 real attributes.

所以它不是为使用虚拟属性而设计的。

For more details this is the code how it generates tags

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 所以它不会工作。

Alternatively you can use RelationController Behaviors
ref: https://octobercms.com/docs/backend/relations#introduction

如有疑问请评论。