TL; DR
- firestoreのデータの取得は
document
からsnapshot
へのアクセスが必要 -
snapshot
からはdata
にアクセスすればデータ取得可能
PHP環境でfirestoreへアクセスしようとした話。
firestoreのデータ内容
やったこと
記事の通り、サービス化する前に動作確認のためにいったん以下のソースコードが動くか確認
<?php
class FirebaseController extends Controller
{
protected $db;
public function __construct()
{
$this->db = app('firebase.firestore')->database();
}
public function load() {
$collection = $this->db->collection('talk_api');
$document = $collection->document('R4166zsxknrklBy607jH');
return response()->json([
'data' => $data,
]);
}
}
想定した戻り値
array:1 [▼
"doc" => "hogehoge"
]
とか
{doc: "hogehoge"}
のKey-Value形式のデータ
実際の戻り値
解決策
想定した値を取得するにはsnapshotまでアクセスする必要があった
use Google\Cloud\Firestore\FirestoreClient;
$firestore = new FirestoreClient();
$document = $firestore->document('users/john');
$snapshot = $document->snapshot();
$snapshot
にはGoogle\Cloud\Firestore\DocumentSnapshot
オブジェクトが格納されており、上記ドキュメントのメソッドたちが使えるようになる
dd($snapshot)
すると、
data
に求めているデータがいる
そして、ドキュメント見ていたらdata()
ってメソッドがあったので使ってみたら取得できた
class FirebaseController extends Controller
{
protected $db;
public function __construct()
{
$this->db = app('firebase.firestore')->database();
}
public function load() {
$collection = $this->db->collection('talk_api');
$document = $collection->document('R4166zsxknrklBy607jH');
$snapshot = $document->snapshot();
$data = $snapshot->data();
return response()->json([
'data' => $data,
]);
}
}
所感
当初のソースコードが間違っていただけだった。
いろんな記事を漁っているうちにおかしなソースコード書いているだけだった。