想定している環境についてまず、想定しているテーブルは以下のものです。ユーザ管理、ログイン認証のプラグインである「CakeDC/Users」を使う際に作成するテーブルが「Users」です。ユーザ情報として、ユーザ名や住所、電話番号と言った情報を追加で登録、管理する想定ですが、プラグインで生成される「Users」テーブルには手を付けず、1対1でアソシエーションする「UserDetails」テーブルを作成する仕様を想定しています。CHARSET=utf8また、この記事の説明は、テーブルのアソシエーションに関連する説明になっています。そのため、実際に「CakeDC/Users」を利用して動作検証をしようとする場合は、下記の「CakeDC/Users」に関連する記事を確認してください。デフォルトだと、UsersTableファイルは「/vendor/cakedc/users/src/Model/Table/UsersTable.php」にあります。コアファイルは触らずに、「/src/Model/Table/UsersTabble.php」にファイルを設置し、コアファイルの処理をオーバーライドさせています。Bakeすると、「/src/Model/Table/UserDetailsTabble.php」の「initialize」には下記のようになっていると思います。UserDetailsのデータを取得することはできません。tableファイル「/src/Model/Table/UsersTabble.php」に下記を追記します。'INNER']);}「joinType」に「INNER」を指定していますが、指定がない場合はデフォルトとして「LEFT」になります。UserDetailsのテーブルがないときの対応の違いです。NULLが入っているものとして取得します。Usesのみ取得します。Tableファイルの設定をしている場合、Usersテーブルから値を取得する場合は、コントローラーには下記のように記述します。INNERでアソシエーションしていますので、UserDetailsにレコードがない場合は、Usersのレコードも取得されません。ユーザ情報を一覧表示するようなシステムの場合、必要となるのは、UserDetailsテーブルに情報が登録されているレコードですので、INNERでアソシエーションされている方がいいでしょう。Usersのレコードも取得する必要があります。INNERでアソシエーションするのではなく、LEFTでアソシエーションした情報を取得する必要があります。LEFTを切り替えればいいのでしょうか?前振りが長くなりましたが、ここが今回の記事のポイントです。Controllerで「leftJoinWith()」「innerJoinWith()」を指定する結論は、下記のように「leftJoinWith()」句を使います。$this->Users->find()->leftJoinWith("UserDetails")->contain(["UserDetails"])->all();上記の通り「leftJoinWith()」句を使うことで、UsersTableでは「INNER」が指定してあっても「LEFT」でデータを取得してくることができるようになります。ここで紹介した方法と逆に、UsersTableの方で「LEFT」を指定し、レコードを取得する際に「innerJoinWith()」を使う、という方法もあります。null」で「UserDetails」のレコードがないものを省く方法もあります。hasOneなどのアソシエーションの設定がないとエラーになります。Tableファイルでアソシエーションの設定を行うものですが、Tableファイルにアソシエーションの設定がなくても、Controllerファイルでテーブルの連携の設定を行うこともできます。Modelで管理しているテーブル名(UserDetails)ではなく、実テーブル名である「user_details」を使う点です。Cookbookを参照してください。Tableでアソシエーションを指定するべきもの?ちなみに、この記述方法は、CakePHP3では望ましい書き方ではないのではないか、という感じがします。CakePHP2の頃までは「Recursive」「ContainableBehavior」を使ってアソシエーションのテーブルのデータをコントロールしていたようですが、CakePHP3では「Recursive」「ContainableBehavior」は削除されています。https://book.cakephp.org/3.0/ja/appendices/orm-migration.html#recursive-containablebehaviorCakePHP3では、アソシエーションしたどのテーブルのデータを取得するかは、「contain」で指定するようになりました、というお話ですが、Tableファイルにアソシエーションを設定し、contain句を使って必要なデータを指定すれば、余計なデータを取得して処理が重くなるということも防げるのではないか、と思います。Ajaxを使う方法の解説。Successとthenの両方を解説。CakePHP3GoogleAdwordsGoogleAdwords最後までお読みいただきましてありがとうございます。コメントをキャンセルメールアドレスが公開されることはありません。*サイト下記の空欄を埋めてください。date*日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)※入力いただいたコメントは管理者の承認後に掲載されます。関連記事CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。Pluginの検索処理の中で動的に表示件数を変える方法です。CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。CakePHP3でQRコードを作成、表示するライブラリ「cakePHP-QR-Code-Helper」CakePHPでQRコードを生成するライブラリ「cakePHP-QR-Code-Helper」の紹介。GDライブラリのインストールも必要ないHelperとして提供されているため、ファイルを設置すればすぐに使用可能。CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定するCakePHP3のkeywordsとdescriptionを設定する方法の解説。CakePHP3にはmetaタグを編集するHTMLヘルパーが用意されているためそれを利用すればOK!ポイントはブロック化を有効にすること。2.3でファイルのアップロード処理を作るCakePHPでプラグインを使わないファイルアップロード処理を解説します。DBにファイルを格納する方法も。save()で発生するエラーを確認する方法を解説CakePHP3でデータ保存処理のログを取得する方法。try...catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違いCakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。URL短縮サービス「TTTオンライン(https://ttt.onl)」公開URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。Shortenerが2019年3月にサービス終了。PREVPHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法NEXTCakePHP3のdatetime型カラムの日時の扱い。小学校でプログラミングの授業が始まる。プログラムを組むことを覚えることが本質ではなく理論的な手順の組み立てのトレーニングをする授業という理解が必要だと思う。Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。具体的なスクレイピングを実行するサンプルソースも。Parser」の使い方を解説。要素を取得する方法、そこから属性を取得する方法を解説。マニュアルにはない注意点なども解説。2020.01.27PHPでスクレイピング。スクレイピング」で検索すると「phpQuery」ばかりヒットするが、10年以上も放置されている。Parser」をオススメする。2020.01.26PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。add_shortcode関数を使ったショートコードという機能を利用します。不正なコピーコンテンツからの直リンクを拒否する.htaccessの設定方法。拒否するサイトを指定、許可するサイトを指定する方法、単純な拒否と画像の差し替えを解説。口コミサイトを作るために必要な評価点、レビューを投稿できるプラグインを探して評価。10プラグインをチェックし、8プラグインは詳細解説付き。2014.07.17BackWPupでバックアップ・リストア(復元)の具体的手順BackWPupその9。バックアップファイルからのリストア(復元)の手順です。109キーボード)は日本人サイズのキーボード。ショートカットも押しやすく女性や子供にも優しいサイズ。Web開発・運用に役立つ記事を中心に紹介しています。