Как сохранить массив в виде строки в атрибуте - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу сохранить массив в виде строки в поле open_hours. Как я могу это сделать. Пожалуйста, помогите мне. Это мой код. Заранее спасибо

    $company = Company::create([
        'company_name' => $request->input('company_name'),
        'company_picture'=> $company_picture,
        'address' => $request->input('address'),
        'latitude' => $request->input('latitude'),
        'longitude' => $request->input('longitude'),
        'zipcode' => $request->input('zipcode'),
        'city' => $request->input('city'),
        'country' => $request->input('country'),
        'open_hours' => $request->input('open_hours'),
        'subcategory_id' => $request->input('subcategory_id'),
        'price' => $request->input('price'),
        'age_limit' => $request->input('age_limit'),
        'company_description' => $request->input('company_description'),

    ]);

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы можете сохранить его в базе данных 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
0 голосов
/ 14 ноября 2018

Использовать столбец open_hours в качестве json для хранения значений массива.Миграция Laravel имеет тип столбца -> json ('column_name')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...