🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

890閲覧

CakePHP4 画像含むデータをjson_encode()できない

MKannna

総合スコア4

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/02/12 06:43

前提・実現したいこと

Tests +--------------+----------------------------+ | Field | Type | +--------------+----------------------------+ | id | int | | name | varchar(50) | | img | blob | | filename | varchar(100) | +--------------+----------------------------+ +----+---------------------------------------+ | id | name | img | +----+---------------------------------------+ | 1 | tesrA | 0x37383165336239373538.. | | 2 | testB | 0x61393939336464313561.. | +----+---------------------------------------+

上記のような構造のTableがあり
ajax通信でidを絞り込んだデータを取得して返す
単純な処理をしようとしていますが
json_encode()でNULLになってしまいます。

確認すると、imgフィールドを含まないとちゃんとデータが取得できています。
この画像データを含むデータをjson_encode()できるようにするにはどうしたらいいのでしょうか?

ちなみに、取得したデータは下記のようになっています。

[0] => App\Model\Entity\Test Object ( [id] => 1 [name] => tesrA [img] => Resource id #321 )

試したこと

0x37383165336239373538..

Resource id #321
となるのがどうしてなのか
検索もしましたが、検索方法が悪いのか
全然ヒットしませんでした。

データ型の問題なのかと思い
Json blob型 cakephp
cakephp 画像データ取得
json_encode() blob型 Resource
Cakephp ajax 画像データ取得
などといろいろなキーワードで検索はしたのですが、
jsonデータをcakephpでDB保存とは出てくるのですが
取得して表示の方は全くヒットしませんでした。

ご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

0x37383165336239373538..


Resource id #321
となるのがどうしてなのか

このあたり、CakePHPのコアソースちゃんと追っていく必要があるかと思いますが、内部的にバイナリーデータがリソースとして変換され、保持するようになっているからだと思います。
リソース型の一覧にもblobがあります。
リソース自体は文字列というより実体になるため、JSONには変換できない→NULLになると推察されます。

「ではどうするか」部分は検討の必要がありますが。

画像だけが欲しい→画像を表示するGETリクエスト、コントローラを作成し、response-typeを'image/拡張子'でresponse-bodyにリソースを指定する。実装例

全部返したい→ResourceをBase64に変換してJSONエンコードの配列に含める

とかでしょうか。
「結局どう使いたいか」で決めてください。

投稿2021/02/12 09:24

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MKannna

2021/02/15 11:23

回答ありがとうございます。 理解に時間がかかり返信遅くなってすみません。 Resource id #321 これが、ストリームリソース型になっているということがわかりました。 stream_get_contents($data->thumbnail) で画像だけ取得することができるということまで理解しました。 ここから、単一のデータではなくこの画像データを含む複数のデータをfind()で取得した場合 どのようにしてstream_get_contentsで変換すればいいかがわかりませんでした。 if ($this->request->is('get')) {  $cateId = $_GET['cateId'];  $test = $this->Tests->find('all')   ->where(["cate_id"=>$cateId]); //画像含むデータです。  echo json_encode($test);  exit; } 上記のように返す場合 [0] => App\Model\Entity\Test Object ( [id] => 1 [name] => tesrA [img] => "abc.jpeg" ), [1] => App\Model\Entity\Test Object ( [id] => 2 [name] => tesrB [img] => "def.jpeg" ) のように[img]をstream_get_contentsするにはどうすればいいのしょうか。 レスポンスについてもまだよくわかっていません。 $this->autoRender = false; $this->response = $this->response->withType('image/jpeg'); で設定変えられることはわかりましたが、 $this->response->withStringBody(stream_get_contents($data->thumbnail)); の $data->thumbnail の部分をどう指定していいのでしょうか。 まだまだ勉強不足で恐縮ですが、ご教授のほどよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問