m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

cakephp3のTableオブジェクトをいろいろ見てみた

現在は調査中なので…

私が勝手にそう思っているだけで意味合いややり方は別にあるかも……………………………………というかあるはず

Tableオブジェクト

Rowオブジェクトとして考えられているよう
findメソッドなどはあるが、以前あったqueryメソッドは2.x系とは異なりQueryビルダーを生成するオブジェクトのよう

データの取得
<php
        $members = TableRegistry::get('Members');
        $query = $members->find();
        foreach ($query as $row) {
            var_dump($row);
        }

TableRegistryを使用してTableオブジェクトを取得して、データを取得する
findの取得結果はmemberエンティティオブジェクト

結果ちょっとだけ
class App\Model\Entity\Member#57 (9) {
  protected $_accessible =>
  array(3) {
    'name' =>
    bool(true)
    'age' =>
    bool(true)
    'tel' =>
    bool(true)
  }
  protected $_properties =>
  array(6) {
    'id' =>
    int(1)
    'name' =>
    string(24) "テスとユーザー1"
    'age' =>
    int(20)
    'tel' =>
    string(12) "000-111-2222"
    'created' =>
    class Cake\Utility\Time#58 (3) {
      public $date =>
SQLは実行できないの?

ありますけどねえ…

<?php
        $members = TableRegistry::get('Members');
        $query2 = $members->connection()->query("select * from members");
        foreach($query2 as $row){
            var_dump($row);
        }

Tableオブジェクトの中にconnectionがあるのでそこから直接SQLを実行することで対応出来ます。
しかし、直接アクセスしているので結果はPDOの結果になります。
SQLを記載するのが好きな人はこちらの方がいいかもしれないけどなんかうまくする方法とかあるかな?

ちょっとだけ結果
array(12) {
  'id' =>
  string(1) "1"
  [0] =>
  string(1) "1"
  'name' =>
  string(24) "テスとユーザー1"
  [1] =>
  string(24) "テスとユーザー1"
  'age' =>
  string(2) "20"
  [2] =>
  string(2) "20"
  'tel' =>
  string(12) "000-111-2222"
  [3] =>
  string(12) "000-111-2222"

所感

findメソッド、Queryビルダー、SQLとやり方が増えてきた。SQLの方法は以前の同じで配列地獄になりそうなのであまりにもSQLの構成がやばい場合以外は使わないようにしよう。今回からクエリービルダーが出てきたのでなんかいろいろ勉強してみる。サブクエリーとかjoinなどがうまくいけばこちらへ移行するかも…
あとはビジネスロジックをどこに書くかを考えないと。