Вы можете сохранить его в базе данных JSON
и заставить Laravel обрабатывать его (приведение) в виде массива.
Из документации :
Array & JSON Casting
Тип приведения array
особенно полезен при работе со столбцами.
которые хранятся как сериализованный JSON. Например, если ваша база данных имеет
тип поля JSON
или TEXT
, содержащий сериализованный JSON, добавление
array
приведение к этому атрибуту автоматически десериализует
Атрибут массива PHP при доступе к нему в модели Eloquent:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'options' => 'array',
];
}
Как только приведение приведено, вы можете получить доступ к атрибуту options
и
он будет автоматически десериализован из JSON в массив PHP. когда
Вы устанавливаете значение атрибута options
, данный массив будет
автоматически сериализуется обратно в JSON для хранения:
$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();
Итак, вы можете сделать это в вашей Company
модели:
приложение / Company.php
class Company extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'open_hours' => 'array',
];
}
Конечно, вы должны иметь столбец open_hours
, определяемый как столбец JSON
/ TEXT
:
database / migrations / create_companies_table.php // ваш файл миграции
public function up()
{
Schema::create('companies', function (Blueprint $table) {
// ...
$table->json('open_hours');
// ...
});
}
Обновление
Теперь, когда вы получите экземпляр Company
, вы сможете обрабатывать желаемое поле как array
:
ACoolController.php
// get your instance
$company = App\Company::find(1);
// return it to a view
return view('path.to.view')->with('company', $company);
Тогда по вашему мнению:
путь / к / view.blade.php
@foreach ($company->open_hours as $open_hour)
<p> This is an {{ $open_hour }} </p>
@endforeach