Laravel アプリのデータベースに配列または std オブジェクトを保存する 質問する

Laravel アプリのデータベースに配列または std オブジェクトを保存する 質問する

列に配列または 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属性が配列に自動的に逆シリアル化され、このプロパティに値を設定すると自動的にシリアル化されます。次に例を示します。PHPEloquentJSON

$user = User::find(1);

// $options is an array...
$options = $user->options;

// options is automatically serialized back to JSON...
$user->options = ['foo' => 'bar'];

おすすめ記事