列に配列または stdObject を格納するデータベース テーブルのスキーマは何ですか?
->string を使用して配列変数を挿入すると、db 列に「Array」という単語のみが格納されます。
Laravel は配列をサポートしていますか?
いいえの場合、どのような方法論を実装する必要がありますか?
ベストアンサー1
シリアル化されたデータを型フィールドに保存/挿入できますTEXT
が、そのためには を使用して何かを行う必要がありますphp
。例:
$arr = array('x', 'y', 'z');
これをデータベースフィールドに挿入するには、シリアライズこのように機能します
$serializedArr = serialize($arr);
$serializedArr
これで、データベースに配列を挿入し、使用するデータを取得するときに、アンシリアル化次のようなものを使用します:
$record = SomeModel::find(1);
unserialize($record->field_name);
また、Laravelのアクセサとミューテータすべてを自動化するには、マニュアルを確認してください。非常に簡単です。これについてさらにサポートが必要な場合はaccessors-and mutators
、詳細を記載したメッセージを残してくださいtable
。
アップデート:
Laravel 5.x
許可されているため属性キャストそのため、実行時に属性を別のデータ型にキャストして変換することが可能です。この場合、protected $casts
たとえば次のようにプロパティを宣言するだけです。
protected $casts = [
'is_admin' => 'boolean', // Will convarted to (Bool)
'options' => 'array', // Will convarted to (Array)
];
キャストarray
は、シリアル化されて保存されている列を操作する場合に特に便利ですJSON
。たとえば、データベースにシリアル化された JSON を含む type フィールドがある場合、その属性に配列キャストを追加すると、モデルでその属性にアクセスするときにTEXT
属性が配列に自動的に逆シリアル化され、このプロパティに値を設定すると自動的にシリアル化されます。次に例を示します。PHP
Eloquent
JSON
$user = User::find(1);
// $options is an array...
$options = $user->options;
// options is automatically serialized back to JSON...
$user->options = ['foo' => 'bar'];