Я пытаюсь создать веб-приложение, в котором пользователи могут:
- Загрузить документы
- Загрузить электронные письма (входящие электронные письма)
Документы/ электронные письма будут загружены в то, что я называю «поток».Таким образом, в потоке может храниться много документов и много электронных писем.
Однако я также пытаюсь сделать так, чтобы мои пользователи могли анализировать содержимое документов и электронных писем в соответствии с набором правил синтаксического анализа.Пользователи могут создавать поля , которые могут иметь много правил синтаксического анализа.
Пример: Пользователь A загружает новый документ в поток под названием «Мои документы и электронные письма».Пользователь определил ниже два поля документа для этого потока:
- Ссылка заказа
- Номер отслеживания
Далее, естьнекоторые поля электронной почты , которые также были определены, , но не будут использоваться в этом случае, поскольку пользователь A в настоящее время загружает новый документ :
- From Name
- Email Subject
Все вышеприведенные поля также будут иметь некоторые правила синтаксического анализа, которые будут анализировать содержимое (это не показано в этом примере, так как оно не имеет значения).
Как видите, оба потока "Мои документы и электронные письма" имеют DocumentFields
и EmailFields
.
Это мои текущие настройки:
Stream.php
//A stream can have many document fields
public function documentfields()
{
return $this->hasMany(DocumentField::class);
}
//A stream can have many email fields
public function emailfields()
{
return $this->hasMany(EmailField::class);
}
Document.php
(То же отношение доступно в Email.php
)
//A document belongs to a Stream.
public function stream()
{
return $this->belongsTo(Stream::class);
}
//Get the document fields available for the specific stream.
public function fields()
{
return $this->stream->documentfields();
}
Теперь мой вопрос: как я могу сделать так, чтобы поля были "привязаны" к потоку?, но содержат уникальное значение для каждого Document
или Email
, которое загружается?
Что-то вроде:
document_fields
:
id | stream_id | name
1 | 1 | Order Reference
2 | 1 | Tracking Number
document_field_results
id | document_field_id | document_id | content
1 | 1 | 10 | Lorem Ipsum Dolar Amet for document #10
2 | 2 | 10 | Some other Lorem Ipsum Dolar Amet for document #10
3 | 1 | 55 | Lorem Ipsum Dolar Amet for document #55
4 | 2 | 55 | Some other Lorem Ipsum Dolar Amet for document #55
(та же логика при загрузке электронной почты / входящей электронной почты)
Таким образом, всякий раз, когда новый документ загружается в поток (id.1
), он "наследуется""поля документа выше, но содержимое будет уникальным для каждого поля (поскольку каждый загруженный документ / электронное письмо в конечном итоге будет иметь разное содержимое).
Как будет выглядеть правильная настройка отношений в этом случае?И это правильный путь?