我有以下型号:
Document.php
/**
* Get all of the documents field content.
*
* @return Illuminate\Database\Eloquent\Model
*/
public function fields()
{
return $this->morphToMany(Field::class, 'fieldable')
->using('App\FieldablePivot')
->withPivot(['content', 'type'])
->withTimestamps();
}
那是使用称为FieldablePivot
的数据透视模型的,我需要在其中访问返回content
列。
这是我的FieldablePivot
,这里我覆盖了getCastType
方法:
protected function getCastType($key)
{
if ($key == 'content' && !empty($this->type)) {
return $this->type;
}
return parent::getCastType($key);
}
下面是fieldables
的行:
id | name | content | type |
---------------------------------------------
1 | field_one | [somearray] | array |
2 | field_two | somestring | string |
但是,当我访问文档及其字段以获取字段内容时,例如:
@foreach ($document->fields as $field)
{{dd($field->pivot->content)}}
@endforeach
它将第一个作为字符串返回(即使类型是数组):
"[somearray]"
答案 0 :(得分:1)
您还必须覆盖hasCast
函数,以确保Eloquent知道此列有强制类型转换。
public function hasCast($key, $types = null)
{
if ($key === 'content') {
return true;
}
return parent::hasCast($key, $types);
}
如果不这样做,并且该字段不在$casts
数组中,则Eloquent将不会检测到该属性具有强制类型转换。