首页 > 解决方案 > 无法在 laravel 访问器中获取属性(十月 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 image 最新版本进行开发。

标签: phplaraveloctobercms

解决方案


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

为什么 ??

因为 from code taglist 的设计方式使其可以与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/sql这样not know about our virtual field做是行不通的。

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

如有任何疑问,请发表评论。


推荐阅读