気合を入れて開発の仕事をやったおかげで、好きでもなかったLarabelを使えるようになってしまった、ユゲタです。
個人的には、自ら進んで使おうとは全く思わないんだが、ビジネス現場のプログラマーは、Larabelが大好きな人が多いようで、多少の知識を持っていないと情弱のように扱われてしまいますよね。
なんかトゲのある言い方ばかりしてますが、Larabelを触ってみて、便利な機能や、どのフレームワークでも大体同じようなお作法のようなものは、知らないよりも知っておいた方が、プログラミングには役に立ちます。
とかく、ペチパーという言い方も含めて、web業界でも、オワコン色が強いPHPのようですが、個人的には、どの言語でも同じぐらい仕事で使えて楽しめる自信を持っていれば十分でしょう。
そして、今回は、そんなLarabelのとておきの機能であるEroquent(エロクエント)というデータベース処理というか、MVCのMが頭文字のモデル機能を丸一日四苦八苦して、ようやく理解する事ができたことを、ブログに備忘録しておきます。
Larabelデータベースのモデル機能は、クエリービルダーに尽きる
クエリービルダーとかっこよく聞こえるけど、要するに、独自機能のORM(オーアールマッパー)です。
hasOneやら、hasManyやら、belongToや、hasManyThroughというものを理解できれば、もはやたくさんテーブルがあるSQLを使うwebサービスなんか、チョチョイのちょいです。
そして、ここでは、この辺の機能は、書きません。
なぜなら、世の中にこの機能を親切丁寧に、図解付きで書いてくれているプログラミングブロガーがたくさんいるし、そもそも、Larabelは、リファレンスが充実しているので、そちらを読んで理解してもらった方がいい。
https://readouble.com/laravel/8.x/ja/eloquent-relationships.html
リンクだけ載せておきますね。興味のある人は、学習すべ!
オブジェクト指向のハマりポイント
ちなみに、今回仕事でハマったのは、hasManyThrough機能でした。
ていうか、PHPのclass処理と言った方が正しいのかもしれない。
簡単に説明すると、hasManyThrough機能というのは、とあるマスターテーブルと、ボリューミーなデータテーブルがあるとき、その2つのテーブルをつなぎ込むための中間テーブルというのを設けている場合に、
マスターテーブル → 中間テーブル → ボリューミーデータテーブル
という風に、マスターで持っているIDだけで、データテーブルから、データを取得できるという便利な機能なんですが、
これがクセがすごいんですわ!
まず、引数が多いので、実際触ってみた人は最初メダパニ状態になること間違いなし!
でも、慣れてきたら、便利さの方が上回るので、Larabelを使うのであれば、是非こういうお作法を覚えておいた方がいいだろう。
そして、今回何が問題だったのかというと、Modelクラスの中に、publicやprivateなどで、データのカラム詳細など、型を構築する事になる場合に、ユゲタは、外部参照してもらいやすいように、
public static function
と書く事が多いので、今回もそのようにかいていたら、GraphQLからの参照で、インスタンスかしてもいないのに、staticを入れていると、エラーになるという現象に4時間も悩まされてしまいました。
確かに、
$this->hasManyThrough(.....);
と書くので、インスタンス処理該当になることは理解できる。
でも、newしてない!
まとめ:これは単なるボヤきです。
結論を聞いた人、あれ?と思ったと思うでしょうが、Larabelの機能ではなくて、PHPのclass処理の事だとお気づきだろうか?
しかも、LarabelでGraphQLそこで扱うエロクアント・・・最初はカオスだったのだが、不具合が解消されると、便利極まりない!
でも、吐き出されるエラー文がマトを得ていない上、どのブロガーの説明も、わかりやすそうで、同じ内容を、少しだけ変えているものだらけ。
やはり自分でどんどんコードを書いて学習していっく意外に道はない事が改めてわかった今回の出来事でした。
でも、Larabelできるようになると、何がいいかって、お仕事の幅が増えるんですよ。
安直なwordpressと、技術力の高いLarabelを知っておけば、フリーランスエンジニアとして、食いっぱぐれはない・・・ハズ・・・
0 件のコメント:
コメントを投稿