无法在 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/sql
做 not know about our virtual field
所以它不会工作。
Alternatively you can use RelationController Behaviors
ref: https://octobercms.com/docs/backend/relations#introduction
如有疑问请评论。
我目前正在使用 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/sql
做 not know about our virtual field
所以它不会工作。
Alternatively you can use
RelationController Behaviors
ref: https://octobercms.com/docs/backend/relations#introduction
如有疑问请评论。