TransWikia.com

一部の列をbase64に変換し、他の列をjson形式に変換します。

スタック・オーバーフロー Asked by jjman on September 1, 2021

テストテーブル

id cm1 cm2 
1 a123 b123

コード

$test = Test::get();
$a = $test->pluck('cm1');
json_encode($a);
$b = $test->pluck('cm2');
base64_encode($b);
return response()->$test->toArray();

これで変換は完了しましたが、以下のエラーが表示されます。

エラーメッセージ

未定義のプロパティ:Illuminate  Routing  ResponseFactory ::

cm2のみをbase64に変換したいのですが、どのように書けばよいですか?
変換を元に戻す方法がわかりません。
どのように配列に戻しますか? toarrayではありませんか? 公式サイトで使い方がわかりませんので、どうすればいいですか?

最終的にはapiとしてページに出力します。

One Answer

こんにちは、はじめまして。

ご質問の内容に不明瞭な点がありますのでこちらで解釈させていただきました。

質問の内容を、データベースから取得した値cm1,cm2があり、cm1は文字列で、cm2をBase64で返したい(バイナリが含まれるため)。また全体の応答はAPIとして利用するため、JSONで戻したい、とした場合のコードは以下のようになります。

テーブルを用意することまではできませんので、配列で代用している点はご理解ください。
またBase64が利用される理由を明白にするためcm2には制御コードをいれています(ご提示いただいたものはb123ですが...)。

$test = ["cm1"=>"a123","cm2"=>Chr(10).Chr(11).Chr(12).Chr(13).Chr(14)];
$a = $test["cm1"];
$b = $test["cm2"];

return response()->json([
    'cm1' => $a,
    'cm2' => base64_encode($b)
]);

エラーが出ている理由はresponseオブジェクトのメソッドを正しく呼び出していないためかと思われます。
このオブジェクトはhttpの応答を返すもので、repsonseにメソッドチェーンで詳細をつなげていくといった形で用います。
つまり、repsonseオブジェクトに存在するメソッド以外は呼び出すことができません。実装されているメソッドについては公式のドキュメントをご確認ください。上記のようにjsonで応答を返すメソッドも用意されています。

このあたりはだいぶ基礎的な事柄ですので、一旦PHPでのクラスやオブジェクトの扱いなどを学習されることをお勧めします。

https://laravel.com/api/5.8/Illuminate/Http/Response.html
https://readouble.com/laravel/5.5/ja/responses.html

質問の内容についてですが、
この場合、質問のタイトルは「Laravelでデータベースの内容をjson応答形式で返したい」がふさわしいでしょう。
また質問の内容にはLaravelやPHPのバージョン、可能であればTest::get()の内容、もしくはその説明を含めて記述していただけると、回答していただける方も多くなるかと思います。

Correct answer by Kouki.W on September 1, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP