У меня 4 модели:
- Поток
- поле * 1006
- Документ
- Результат
Тогда у меня определены следующие отношения:
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
).
Я могу сделать это сейчас:
$document = Document::find(1);
foreach($stream->fields as $field)
{
$content = myParseFunction($document->content);
$field->save(['content' => $content]);
}
Это создаст результат для каждого поля в потоке. Мол, если бы у моего потока было 2 поля:
results
таблица:
id | field_id | content
1 | 1 | Lorem ipsum
2 | 2 | Another ipsum
Однако каждый раз, когда я загружаю новый документ, результат будет перезаписываться.
Поскольку содержимое каждого загруженного документа уникально , как сохранить результат для поля и для конкретного документа .
Например, если в моем потоке еще 2 поля, но я загружаю 2 документа:
results
таблица:
id | field_id | document_id | content
1 | 1 | 1 | Lorem ipsum
2 | 2 | 1 | Another ipsum
3 | 1 | 2 | Another unique content
4 | 2 | 2 | Yet another unique content