У меня есть веб-сайт, где пользователи могут преобразовать текстовый документ и сохранить его в том, что я называю field
. Один текстовый документ может иметь динамическое количество полей, что затрудняет мне создание проекта реляционной базы данных.
Рассмотрим ниже настройки.
У моей модели Field.php
есть таблица fields
.
id | name | type
-----------------------
1 | invoice_no | text
2 | addresses | table
У меня также есть таблица, в которой я сохраняю результат поля для конкретного документа:
На модели Result
У меня есть $casts
тип:
protected $casts = [
'content' => 'array'
];
Это моя results
таблица:
id | field_id | document_id | content
-------------------------
1 | 1 | 32 | #81724
2 | 2 | 32 | [{"0": "Parkway", "1": "Broadway"}, {"0": "Avenue St.", "1": "Main St."}]
Данные из таблицы просто читаются из файла .json
.
Теперь, в конечном итоге, когда все поля для определенного документа (в данном случае 32
) введены в мою базу данных, я хотел бы отправить веб-крюк с данными поля, такими как:
{
"invoice_no":"#81724",
"addresses": [{
"0": "Parkway",
"1": "Broadway"
},{
"0": "Avenue St.",
"1": "Main St."
}]
}
Итак, вот что я видел, но я не уверен, что это лучший подход?
-
$casts
в моей модели возвращает content
в виде массива - но, как вы можете видеть для results.content
, это может быть как строка, так и массив.
- Как мне хранить контент в моей базе данных? Я не могу сделать столбец типом
JSON
, если я также хочу хранить строки.
Другой подход?
Разумнее было бы иметь два столбца в таблице results
для содержимого, поэтому оно становится:
id | field_id | document_id | text | array
----------------------------------------------
1 | 1 | 32 | #81724 | NULL
2 | 2 | 32 | NULL | [{"0": "Parkway", "1": "Broadway"}, {"0": "Avenue St.", "1": "Main St."}]