オブジェクトとして取得する必要がある列にJSONを含むテーブルがありますが、laravelモデルを使用してデータをプルすると、明らかにJSONまたは文字列として返され、このモデルを使用するすべての場所でデコードする必要があります(これは乾いたコンセプトではありません)しかし、1つのレコードと1つの場所をプルすると、それは1つのコードの実行だけでOKですが、データと複数の場所のコレクションをプルする必要がある場合は、毎回同じデコードを実行する必要があります自作のループを使用する代わりに、laravel で何かできる方法があります
ここにテーブルがあります
+-----------------------------------------------------------------------------+
| table |
+-----------------------------------------------------------------------------+
|id | title | text |
+-----------------------------------------------------------------------------+
| 1 | A1 | {"subject":"Subject1","word":"Lorem ipsum dolor sit amet, ..."} |
| 2 | A2 | {"subject":"Subject2","word":"Lorem ipsum dolor sit amet, ..."} |
| 3 | A3 | {"subject":"Subject3","word":"Lorem ipsum dolor sit amet, ..."} |
| 4 | A4 | {"subject":"Subject4","word":"Lorem ipsum dolor sit amet, ..."} |
| 5 | A5 | {"subject":"Subject5","word":"Lorem ipsum dolor sit amet, ..."} |
| 6 | A6 | {"subject":"Subject6","word":"Lorem ipsum dolor sit amet, ..."} |
| 7 | A7 | {"subject":"Subject7","word":"Lorem ipsum dolor sit amet, ..."} |
| 8 | A8 | {"subject":"Subject8","word":"Lorem ipsum dolor sit amet, ..."} |
| 9 | A9 | {"subject":"Subject9","word":"Lorem ipsum dolor sit amet, ..."} |
| 10| A10 | {"subject":"Subject10","word":"Lorem ipsum dolor sit amet..."} |
+-----------------------------------------------------------------------------+
私はこれを試しました
$tables = TableModel::all();
foreach ($tables as &$table) {
$table->text = json_decode($table->text);
}
欲しい結果
Array
(
[0] => stdClass Object
(
[id] => 1
[title] => A1
[text] => stdClass Object
(
[subject] => Subject1
[word] => Lorem ipsum dolor sit amet...
)
)
[1] => stdClass Object
(
[id] => 2
[title] => A2
[text] => stdClass Object
(
[subject] => Subject2
[word] => Lorem ipsum dolor sit amet...
)
)
...
)
より効率的でドライに続く簡単な方法がある場合は、私と共有してください。
前もって感謝します。
Attribute Casting
データベースからレコードをフェッチするたびに、コンセプトを使用して目的の形式で結果を取得できます。JSON から配列に変換するには、次のコードを使用できます。
protected $casts = [
'text' => 'array',
];
公式ドキュメントで言及されているように。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加