MySQLスポンサーリンク今回はPHPフレームワークの一つのLaravelの中から、データベースのクエリビルダを自動構築する設定を検討してみたいと思います。具体的には取得条件のテーブルなどの定義情報を渡して、クエリビルダを構築するメソッドを検討します。今回利用するDBはMySQLです。SQLの基本が理解できていることが前提となります。これまでの内容は以下を参照してください。前回までの説明で結合条件と取得するカラムについて対応しました。以下のようなクエリ定義情報を渡すことでクエリビルダを構築するようにしました。],];ただこのままだと、使いにくい部分があるので、変更を加えていきます。取得するカラムの設定については、テーブルのNoと列名を指定することで取得してます。このままだと計算式などができないので、DB::rawメソッドで対応できるようにします。以下のようなrawフラグをクエリ定義情報に追加してみます。'column'にDB::rawメソッドで使用する文字列を設定しています。注意が必要なのは、テーブル名のプレフィックスとして設定する文字列(この場合、「tbl」)を含めた形式で記述する必要があります。プレフィックスを変更する場合、こちらの設定も変更する必要が出てきます。],];この追加したフラグを元に、addSelectの部分を変更します。$query->addSelect($addCol);}この状態でtoSqlメソッドで確認すると以下の結果が得られました。`tbl2`.`col1`問題なくDB::rawメソッドの部分も設定されました。複数条件による結合joinやleftJoinの結合条件について、その結合条件の数が一つの場合はメソッドの引数に指定しますが、複数ある場合は、第2引数にクロージャを指定して設定することになります。$join->on('table1.col2','=','table1.col2');});複数の結合条件を構築するには、クエリ定義情報から動的にクロージャを定義し、それを渡すことによって対応することができそうです。動的にメソッドを定義することは、ちょっと調査しても簡単に対応できそうにないので、他の方法で対応します。具体的にどのように対応していくかと言うと、結合条件が一つの場合の書き方とDB::rawメソッドを利用して、複数の条件を渡します。結合条件の左辺の部分をDB::rawメソッドで設定し複数の条件と最終条件の左辺まで記述して対応するイメージとなります。//結合条件が一つの場合と同じ形式にして、DB::rawで対応する。'table2.col1');クエリ定義情報の結合条件を複数持てるようにし追加してみます。],];このクエリ定義情報から、結合条件が一つの場合と同じ形式にして、DB::rawメソッドで対応するように設定すると以下のようになります。}}この状態でtoSqlメソッドで確認すると以下の結果が得られました。`tbl2`.`col1`問題なく結合条件が設定されています。これにより複数の結合条件にも動的に対応できるようになっています。この対応によりクエリビルダを自動構築するメソッドの対応範囲が大きくなり、色々な場面で利用できるようになったと思います。まとめ今回はLaravelのデータベースのクエリビルダについて、定義情報から構築する方法を検討しました。今回の検討により、Select項目や結合条件については、ある程度対応できる状態になりました。この他の設定については、また別の機会で紹介します。はてなブログPro非エンジニアがプロジェクト管理ツールを開発しています。現在、利用停止しています。2スポンサーリンク【スポンサーリンク】はてなブログをはじめよう!oooprojectさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。