在我的Web应用程序中,用户将能够将一些已解析的内容保存到名为field_results
的表中。
但是,此模型需要引用两个多态关系:
FieldResults.php
:
// A field result morphs to either a document field or email field.
public function fieldable()
{
return $this->morphTo();
}
// A field result morphs to either a document or email.
public function typeable()
{
return $this->morphTo();
}
fieldable
是指:
而typeable
表示:
在我的DocumentField
和EmailField
模型中,我定义了以下关系:
// A field will have a final result.
public function result()
{
return $this->morphOne(FieldResult::class, 'fieldable');
}
在我的Document
和Email
模型中,我对此进行了定义:
public function results()
{
return $this->morphMany(FieldRuleResult::class, 'typeable');
}
因此,请考虑下面的循环,我需要在其中保存一些内容,这些内容将引用特定的documentfield / emailfield和特定的document / email。
foreach ($document->fields as $field) {
$content = $field->content->text;
//Save the content to `FieldResult
$field->result()->create(['content' => $content]);
}
上面只会设置fieldable
变体的值:
SQLSTATE[HY000]: General error: 1364 : Field 'typeable_type' doesn't have a default value [...]
如果我将其更改为保存到文档,则会收到以下错误消息:
//Save the content to `FieldResult
$document->result()->create(['content' => $content]);
SQLSTATE[HY000]: General error: 1364 Field 'fieldable_type' doesn't have a default value [...]
该怎么办,所以我的模型FieldResult
可以具有两个多态关系?
答案 0 :(得分:0)
您可以通过替换以下行来解决此问题:
$field->result()->create(['content' => $content]);
通过以下几行:
$field->result()->create([
'content' => $content,
'typeable_id' => $document->id,
'typeable_type' => get_class($document),
]);