如何在属性中将数组存储为字符串

时间:2018-11-14 14:53:52

标签: php arrays laravel laravel-5

我想将数组作为字符串存储在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 :(得分:1)

您可以将其JSON存储在数据库中,并使Laravel将其作为数组处理(广播)。

来自documentation

  

数组和JSON转换

     

array强制类型在处理列时特别有用   存储为序列化的JSON。例如,如果您的数据库具有   包含序列化JSON的JSONTEXT字段类型,添加   array强制转换为该属性会自动反序列化   在Eloquent模型上访问PHP数组时将属性赋给它:

<?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模型中做到这一点:

app / 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

答案 1 :(得分:0)

使用open_hours列作为json来存储数组值。 Laravel迁移的列类型为-> json('column_name')