PHP-保存关系-共享和唯一引用

时间:2019-04-25 07:48:30

标签: php laravel eloquent

我有4个型号:

  1. 字段
  2. 文档
  3. 结果

然后我定义了以下关系:

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

1 个答案:

答案 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]);

}