背景
スパイラルに中途入社して一年目です!!
とある社内案件で、スパイラルというローコードプラットフォームを使ってチーム開発に参加しました。
今までほとんどPHPを触ったことがなかったワイが、まさかの一部PHP担当に……!
ボロ雑巾のようになりながらも、チームメンバーに助けられつつ
今までPHPをろくに触ってなかったワイが、一部PHP開発となり、ボロボロ雑巾になっていく日々の中、チームメンバーに助けられながらデータ取得に詰みまくった日々の記録を書いていきます( ̄^ ̄)ゞ
※ 社内案件とはいえ、コードは全部お見せできないので、サンプルコードで紹介していきます!
こんな方に向けて書いてます
初めてPHPを触って、いろいろ詰んだ経験を元に
同じように「うわああ」ってなってる人のヒントになればと思って書いてます。
つまり!
・スパイラルで開発される方
・PHPの書き方
・多量レコードの抽出に気になる方
何をして、どうなったのか?
やりたかったこと
トランザクションDBからレコードを抽出して、条件分岐させて、その結果をJSで表示したかった!
しかし!!!!!!!
本番環境でテストしてみたら、気づいてしまった…
アレ?データ一部しか抽出できないじゃないかよ!!!! (・・;)
あばばばばば ( ̄◇ ̄;)
さて、検証して、解決に向かおう
なぜコードは正しいのに、データが取れない!?
サポートサイトのサンプルを参考に、こんな感じで書いてました。
$db = $SPIRAL->getDataBase("member");
$db->addSelectFields("email", "name");
$db->addLikeCondition("email", "@example.com");
$response_select = $db->doSelect();
print_r($response_select);
print_r
の部分をvar_dump
に変えても特に問題なし。
JS側も問題なさそうなのに、なぜかデータが足りない……。
参考リンク
レコード数に注目
今回使ったDB、レコード数が10万件以上。
でも、スパイラルの仕様では、1回のAPIで取れるのは最大1000件までなんです!
(ここでようやく詰みの正体に気づく)
どうやって大量レコードを取得するか分からず、またもサンプルとにらめっこ…
そんなとき!
チームメンバーが救世主のごとくスパイラルのPHPライブラリ を教えてくれました。
まさにドラえもんが登場する勢。
PHPライブラリって?
スパイラルが提供してるPHP用の便利な関数集です。
まだ全然理解は浅いけど、目的の動作に近い関数を見つけて使えば、かなり楽できる印象。
今回使ったのは doSelectLoop
って関数。
その名の通り、1000件以上あっても、ループして全部取ってきてくれる神機能!
<?php
$SPIRAL->setApiTokenTitle($api_token_title);
$db = $SPIRAL->getDataBase("db_title");
$db->addEqualCondition("field_title", "value");
$db->addSortField("prime_key", true);
$result = $db->doSelectLoop();
?>
doSelect
からdoSelectLoop
に変えて、ループ処理をちょっと工夫したら
無事、大量レコード取得に成功しました!
参考リンク
今回学んだこと
前提を疑うこと!
実は2〜3時間ぐらい、foreach
の処理を見直したり、JSばっか見てて…
「バックエンドは合ってるはず」と思い込んでたんです。
でも実際は、PHP側の仕様が原因だった。
フロントが見やすくても、バックエンドの前提もちゃんと疑うべし!
困ったらメンバーに頼る!
今回は、朝会で「ここの処理がうまくいかなくて…」と相談したら、PM&メンバーから仮説とサンプルコードがいくつも出てきて、
ひとつずつ潰していったら解決できました!
チーム開発、仲間って大事!ほんとにありがとう… (;ω;)*
プラットフォームの仕様はちゃんと理解しよう!
「1000件まで」 って仕様、知ってたはずなのに、応用のときに思い出せなかった…。
プラットフォームの基本仕様、大事です。
今後もっと活用していくためにも、しっかり理解していきたいと思います!
ライブラリは、まず試してみる
ライブラリの関数、たくさんあって一見よくわからんけど、まずはサンプル通りに動かしてみるのが近道!
一発で何とかしようとしないで、ひとつずつ検証してくのが結局早かったです。
最後に...
入社して、元々開発側に人じゃないですが、社内案件に携わられて、
メンバーに助けられながらひとつのウェブアプリを完成できたのがいい経験でした。
以前、誰かに教えてもらったが、
詰む=積む 、詰んだ分、ちゃんと経験値として積まれてるなって感じた(;ω;)
そして、そんなスパイラルver.1にはトライアルできますので、
ご興味あればぜひこちらからご登録お願いします! (はい、宣伝です!!)
ではまた〜!