【发布时间】:2019-04-22 16:21:28
【问题描述】:
在我的网络应用程序中,用户将能够将一些已解析的内容保存到名为 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');
}
所以考虑下面的循环,我需要保存一些内容,这将引用特定的文档字段/电子邮件字段和特定的文档/电子邮件。
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可以有两个多态关系?
【问题讨论】: