Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
![[cakephp] Queryオブジェクトから実行したSQL生成 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/31a148ac3dd14f5820197e7b0fc9c10175189d8d/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMjM3MTUlMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2ODM5MDQ_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9MWRkN2M3NWZkOGY1YWI0ZDg4ZmRiYWQ3ZjM1NTljNmY%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D9fbfb0a5253625858f0460889cba3f2c%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JTVCY2FrZXBocCU1RCUyMFF1ZXJ5JUUzJTgyJUFBJUUzJTgzJTk2JUUzJTgyJUI4JUUzJTgyJUE3JUUzJTgyJUFGJUUzJTgzJTg4JUUzJTgxJThCJUUzJTgyJTg5JUU1JUFFJTlGJUU4JUExJThDJUUzJTgxJTk3JUUzJTgxJTlGU1FMJUU3JTk0JTlGJUU2JTg4JTkwJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9ZGY0NDVmMzcwMzRmODJlMjFmMTUxZjc4YjQyOWUxZGQ%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBjcmFucHVuJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9ODU2NWJjZmQ1ZjNiNDQwOTcwZDk3NTZmYzkzZTdhYTE%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D364957a0a9dc9e9e26224470fb01983d)
こんにちは、みやがわです。 CakePHPで開発を行う上で必ず導入したいライブラリの一つである IDE Helper をご紹介します。 環境 CakePHP: 4.4.15 ( 3版もあります ) PHP: 8.1.20 IDE Helperとは IDE Helperとはその名の通りIDEやエディタを補助するためのプラグインで、主に補完の面でサポートします。 PHPの言語仕様に対応しているIDEでは最初からある程度の補完はされますが、扱うフレームワークがマジックメソッドを持っていたり特殊なインスタンス参照を行っている場合には適切な補完を表示することが出来ません。 CakePHPの場合、そういった補完を適切に表示するためにはクラスのPHPDocに対して @propertyタグを追加する必要があります。 例) $this→loadComponent() で読み込んだクラスの補完を効かせるために
カスタムファインダーとは カスタムファインダー とは Model が提供するファインダーの中で find('all') でも find('first') でも find('list') でも find('count') でも find('threaded') でも find('neighbors') でもない独自のファインダーのことです。 たとえば、データベース中から有効なユーザーのみを取得したいとします。こうした場合にカスタムファインダーを活用することができます。頻繁に使用する検索条件であればコードの重複を削減できますし、そうではなくて、あるアクション固有の処理だったとしても CakePHP ではコントローラーをスリムにしてモデルを太らせるのが鉄則 1 です。 カスタムファインダーを作成する では、さっそくカスタムファインダーを作ってみましょう。有効なユーザーのみを取得する find('
CakePHP Advent Calendar 2017、第4日目です! 私は最近だとCake3を利用しているのですが、触っていた期間でいうとまだまだCake2の方が長い〜と思います。 なので、昨日のカスタムファインダーのエントリはとても興味深かったです・・・数えるほどしか使ってない(書いていない)機能だったので、改めて理解した上で機会があれば活用してみたいと思いました。 Collection の話をします! さて、今回はCakePHP3の話になります。 もともとCake2からHashクラスは大好きなのですが、Collectionは同じく「集合をよしなに扱う便利クラス」になります。 ORM層に見られるように「プリミティブな連想配列を脱却した良さを分かち合おう」というCake3時代の思想を、色濃く感じることができる場面です。 ドキュメントはこちら: https://book.cakephp.
社内用にまとめた内容の転載。 ココらへんの話をします CakePHP3の値チェックは2段階! ValidationとValidation Provider Application Rules Entityに渡す値のチェック(検証)は2段階で行われる CakePHP3では、従来とは大幅に「バリデーション」の機構が変更されました。 これまでModel::save()やModel::delete()時に暗示的に、もしくは明示的にModel::validate()をした際に走っていたデータの検証が、次のような2ステップに分けて扱われます。 Entity作成・更新時に行われる「validation」 Databaseに作用する(insert, update, delete)際に行われる「(application | domain) Rule」 この変化はパッと見とっつきにくいし、 なんぞ…という感じ
CakePHP3のChronosの公式ドキュメントを翻訳したので、 その機能についてご紹介します。 以前の記事CakePHP3公式ドキュメントの翻訳が一石N鳥だった件でもご紹介しましたが、 私は「CakePHP3翻訳会」への参加を通じて翻訳を行なっていて、 その中のひとつとしてChronosを翻訳しました。 Chronosとは Chronosは、CakePHP3.2から導入された、日付時刻を扱うライブラリです。 公式のリリースには以下のように書いてあります。 Carbon ライブラリを Chronos に置き換え Carbon ライブラリは cakephp/chronos に置き換えられました。この新しいライブラリは Carbon のフォークで、依存関係は追加されていません。カレンダーのdateオブジェクト、イミュータブルなdateオブジェクトとdatetimeオブジェクトを提供します。
資産価値の高いテストを書くためにFabricateを使い始めました この記事はとても共感出来る記事です。 開発作業の最初や途中で UnitTest を入れるぞっと盛り上がったときは、テストを書くのですが、後ほど負担になって UnitTest を実行しなくなるっというケースが多々あります。 (特にフェーズ1リリースが終わって、次の開発まで期間があく案件のケースで多発します。。。) 今後、良いテストを書くために CakePHP4 で Fabricate を導入する手順を残します。 この記事でわかること CakePHP4 へ Fabricate を導入する手順。 この記事内のソースは以下で公開しています。 https://github.com/katsuhiko/cakephp-vue-study 事前準備 CakePHP4 プロジェクトは以下の記事で作成して、Docker で動かしつつ、最低限
CakePHP Advent Calendar 2017の16日目です。 @keisukefunatsu さんの昨日の記事は、codeceptionをcakephp3で扱ってみるチュートリアルでした。 CakePHPで自動テストを書いていますか? ちょうど1週間前に9日目の記事として、CakePHP3 のアプリケーションを Behat でテストする(update編)を書きました。これはE2Eですが、もちろんPHPUnit(など)を使った単体テストもあるでしょう。 CakePHPではfixtureという仕組みを使ってテストデータを作成できるようになっています。 この記事は、テストをするには避けては通れないテストデータについて、以下のような悩みを持っている方を対象とした内容になります。 fixture にテストデータを書くのが面倒 DBにカラムを追加したときに fixture を書き換えるのが
初、Advent Calendarです。よろしくお願いします(^o^) この記事は、CakePHP 3 Advent Calendar 201513日目用に書きました。 Queue Pluginって? イケメンのMark S.さんが作ってくれている、CakePHP Queue Pluginのことです。 DBにTaskを追加して、Queue用のworkerを動かしておくと、定期的にTaskを実行してくれます。 なぜ、Queue Pluginを使ったか スクレイピングでデータを貯めて、それを参照するWebアプリを作っています。 定期的にスクレイピングしてデータを貯めていますが、それが追いつかない時に、追加でスクレイピングしてくれる仕組みがあると良いなと考え、調べた結果、Queue Pluginを使ってみることにしました。 ※スクレイピングの実行間隔を狭めれば良いんじゃないかとか思いましたが、ま
今回やりたいこと postされてくる日付を、現在の日付(今日)より、前であればvalidationを有効にしたい 基本 app/src/Model/Table/HogeTable.php POST入力値等の入力値チェックは validationDefault に記述する saveの入力値チェック(Entityチェック)は buildRules に記述する cakephp3のバリデーションは2パターン存在 思考の流れ 自分で考えたbadコードを、プレビューしていただき、 より良いコードになった流れです。 public function validationDefault(Validator $validator) bakeにより、デフォで設定されているのが、 下記の初期段階です。 ※hoge_date は、postされてくるinputのラベル名になります。
<?php namespace App\Model\Table; use Cake\ORM\Query; use Cake\ORM\RulesChecker; use Cake\ORM\Table; use Cake\Validation\Validator; class UsersTable extends Table { public function initialize(array $config) { parent::initialize($config); $this->setTable('users'); $this->setDisplayField('username'); $this->setPrimaryKey('id'); } public function validationDefault(Validator $validator) { $validator ->
CakePHP3でデータベースを引くときに、他のテーブルを取り込めるcontainという機能があります。単にデータを取ってくるだけでなく、更に細かい制御も行えます。 containの必要性 CakePHP3ではモデルクラスもTableとEntityに分かれたことで、1レコードがEntityオブジェクトとなったのですが、その結果発生しうるのがN+1問題です。Entityの中から関連づいたテーブルを参照しようとすると、それぞれのEntityごとにクエリが飛ぶため、クエリの数が膨れ上がってしまうのです。 これを防ぐために、データベースから関連するレコードを一気に引いてしまう、という手法があって、以下のどちらかで実装されています。 関連する別テーブルとJOINすることで、まとめてデータを引く 関連付けするキーを使って別のテーブルを引いて、あとから合成する CakePHP3で、このような「まとめて引
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く