我有4个型号:
然后我定义了以下关系:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
:
Stream.php
public function fields()
{
return $this->hasMany(Field::class);
}
public function documents()
{
return $this->hasMany(Document::class);
}
:
Field.php
public function stream()
{
return $this->belongsTo(Stream::class);
}
public function result()
{
return $this->hasOne(Result::class);
}
:
Document.php
public function stream()
{
return $this->belongsTo(Stream::class);
}
:
Result.php
现在,我的用户可以将文档上载到流,并且我的用户可以在流上创建许多字段。
将文档上载到流中时,对于定义的每个字段,将根据我创建的某些逻辑来解析文档内容。
此解析的最终结果应保存到数据库(public function field()
{
return $this->hasOne(Field::class);
}
)。
我现在可以通过以下方式这样做:
results
这将为流中的每个字段创建一个结果。就像,如果我的信息流有2个字段:
$document = Document::find(1);
foreach($stream->fields as $field)
{
$content = myParseFunction($document->content);
$field->save(['content' => $content]);
}
表:
results
但是,每当我上载新文档时,结果将被覆盖。
由于每个上载文档的内容都是 ,因此如何保存字段和特定文档的结果。
就像,如果我的Stream仍然有2个字段,但是我上传了2个文档:
id | field_id | content
1 | 1 | Lorem ipsum
2 | 2 | Another ipsum
表:
results
答案 0 :(得分:0)
我认为结果也是由文档确定的,因为您正在为字段解析文档。 我也将文档链接到Result表并在其中存储结果。 一个结果将由文档ID和字段ID确定。
结果
public function fields()
{
return $this->hasMany(Field::class);
}
public function documents()
{
return $this->hasMany(Document::class);
}
文档
public function results()
{
return $this->hasMany(Result::class);
}
字段
public function stream()
{
return $this->belongsTo(Stream::class);
}
public function result()
{
return $this->hasOne(Result::class);
}
然后:
$document = Document::find(1);
$result = new Result();
foreach($stream->fields as $field)
{
$content = myParseFunction($document->content);
$result->save(['field_id' => $field->id, 'document_id'=>$document->id, 'content' => $content]);
}