2017-04-27 13 views
0
$permission = new Permission(); 
$permPost = $permission->create([ 
    'name'  => 'post', 
    'slug'  => [   // pass an array of permissions. 
     'create'  => true, 
     'view'  => true, 
     'update'  => true, 
     'delete'  => true 
    ], 
    'description' => 'manage post permissions' 
]); 

にエラーをスロー:文字列変換(SQLにLaravelは、メソッドlaravel 5.4を作成する上で、アレイ内の配列を渡すのエラーをスローする方法を作成

アレイcreated_at)の値を(ポスト、1、ポストの権限を管理する、2017年4月27日午前5時32分41秒、2017年4月27日午前5時32分41秒))

+0

エラーとは? –

+0

エラーとは何ですか?ログファイルを確認し、ここに投稿してください。 /storage/logs/laravel.log – Paul

+0

文字列変換への配列(SQL: 'permissions'(' name'、 'slug'、' description'、 'updated_at'、' created_at')の値(post、1、postを管理します許可、2017-04-27 05:32:41、2017-04-27 05:32:41)) –

答えて

3

LaravelはArray & JSON Castingミューテータことができます:ドキュメントから

protected $casts = [ 
    'slug' => 'array', 
]; 

ちょうど持っているあなたの許可モデルを更新し

キャストが定義されると、あなたが可能options属性にアクセスすると、自動的にJSONからPHP配列にデシリアライズされます。 options属性の値を設定すると、指定された配列が自動的にシリアル化されて保存用のJSONに戻されます。

これで、Laravelは自動的にすべてを処理します。 配列を配列として渡すだけです。

+0

Perfectありがとうございました。 –

3

それを渡し、slugフィールド上json_encodeをお試しくださいEloquentにDBにとどまる:

'slug' => json_encode([ 
    'create' => true, 
    'view' => true, 
    'update' => true, 
    'delete' => true 
)] 
+0

はい私はそれが動作することがわかっていますが、なぜ私の質問は、最初の配列が正しく渡されている理由です。 –

+0

モデルにmutatorを使用しない限り、LaravelはすぐにモデルをEloquentモデルにキャストしますが、NoSqlモデルではなくRDBMSデータベースを使用しているため、多次元配列をサポートしません。 – Mehrud

0

スラグはデータベース内の文字列です。あなたはそれに配列を渡します。

JSONまたはシリアライズとして保存できますが、これはデータベース設計の匂いです。このデータを適切に保存するために必要な他のテーブルについては、アプリケーション内のどこで使用されるのかによって決める必要があります。

関連する問題