为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Laravel 访问器中获取属性(10 月 CMS)

无法在 Laravel 访问器中获取属性(10 月 CMS)

PHP
临摹微笑 2023-11-03 20:07:22
我目前正在使用 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 镜像最新版本进行开发。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

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

为什么 ??

因为 from code taglist 的设计方式使其可以与TAGSallow 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

如有疑问请评论。


查看完整回答
反对 回复 2023-11-03
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信