CakePHP

PHPStormにコード補完させる in CakePHP3のテンプレート

拡張子ctpで表されるテンプレートファイルはHTMLとPHPが混在するファイルで非常に便利です。 しかし、PHPStormには、テンプレートファイルが何のクラスのインスタンスなのか理解できません。コントローラから$this->set(compact('hoge'))のようにセットされ…

エンティティのデータを加工して取り出したいとき

仮想プロパティーの生成 アクセサーを定義することによって、現在存在しないフィールド・プロパティーへのアクセスを提供できます。 例えば、users テーブルが first_name と last_name 列を持っていたとして、 フルネームのためのメソッドを作れるというこ…

関連のあるテーブルをまとめて持ってくる

アソシエーション - モデル同士を繋ぐ 例えば、articles(id, title, text, author_id)とauthors(id,name)というテーブルがあるとする。 記事を取得するとき、筆者の名前もまとめて持ってきたいときは、 ①$this->belongsTo('Authors')->setForeignKey('author…

CakePHP3でfind()した結果を自然な順にソートする

intではなくcharに数字を入れているとき 1 10 ~~~~~ 19 2 20 とソートされる。 自然順にソートするのは $answers = $this->TfAns->find() ->where(['TfAns.regnum = ' => $regnum]) ->toArray();$answers = new Collection($answers);$answers = $answers->s…

CakePHPのconnect()のアスタリスクの個数

貧欲なスター (greedy star) /* に加えて、 /** 流れ星 (trailing star) 構文が あります。2つのアスタリスクをつなげると、URL の残りを1つの引数として取り込みます。 これは、 / を含む引数を使用したい時に便利です。 $routes->connect( '/pages/**', …

データ検索をマスターする! (4/6) 補足

データ検索をマスターする!(4/6):初心者のためのCakePHP3 プログラミング入門 //find()にQueryExpressionを使うサンプルpublic function find() { //絞り込んだ結果のエンティティ配列 $persons = []; //リクエストの種別がPOSTであるなら if ($this->reque…

複数のテーブルのJOINした結果を表示

クエリビルダにおいて、innerJoinWith()やleftJoiinWith()でJOINしたものをテンプレートで表示するためには $tenancy->_matchingData['Tenants']->stage stackoverflow.com のように書きます。 もし不安な場合はdebugメソッドもしくは$tenancyのみで出力し確…

Unknown finder method とは

$bookmarks = $this->Bookmarks->find('tagged', [ テーブルのfindメソッドの第一引数が重要。 たとえば上記のようにBookmarks->find('tagged',のようになっているときは、BookmarksTableクラスのfindTaggedメソッドを探しに行く。 ここで見つからないときUn…

protected function _setPassword($value)とは

結論はこれ。 [CakePHP3] Setter(セッター)とGetter(ゲッター)をざっくりと知る。 – gomokulog 以下補足。 C#にはプロパティという機能がある。プロパティを実装すると、メンバ変数 x を持つクラスAがあるとき、a.x としても自動的にgetX()が呼び出されると…

bin/cake bakeがWindowsでうまくいかないわけ

bin/cake bake all users bin/cake bake all bookmarks bin/cake bake all tags CakePHP3のbookmarkerチュートリアルにて遭遇。 Linuxとは違ってWindowsでは区切り文字を\にする必要がある。 つまり、Windowsでの正解は bin\cake bake all usersbin\cake bak…

CakePHP3のテーブルとエンティティの違い

CakePHPはMVCであり、その内のモデルを2種類に分けたものがテーブルとエンティティです。ざっくり言うとテーブルとはそのままDBのテーブル(集合)を表し、エンティティとは各行を表します。 テーブルクラスにはDBとの通信に必要な情報が保持されているため、D…

CakePHP3のORM\table::find()のイーガーロードとは

contain 関連をイーガーロード (eager load) するように定義します。 データの取り出しと結果セット イーガーロードとは、N+1問題を回避する手段らしい。 まず、N+1問題とは? ユーザーマスタと、著者のユーザIDを属性としてもつ記事テーブルがあるとします…

Unable to find ~ panel. と出た

Templateディレクトリに間違った名前のディレクトリを作成してしまった。 具体的には単数形にしてしまっていた。 その後、PHPStormのリネーム機能でディレクトリ名を複数形にした。 すると、どのページにアクセスしてもUnable to find ~ panel.とエラーメッ…

CakePHP3のリバースルーティングとは

New router goodies » Debuggable - Node.js Consulting によると、 そもそもリンクの書き方は、文字列での指定と、連想配列での指定の2つがある。 ①文字列の場合$html->link('My post title', '/posts/view/5' ); ②連想配列の場合$html->link('My post titl…

echo $this->Form->create($article);の$articleが必要な理由

ブログチュートリアル - パート2 echo $this->Form->create($article); は、 echo $this->Form->create();としても動いているようにみえるけれど、 ArticlesControllerのsaveで例外(DB接続失敗、バリデーションエラー等)が起きた際、 $article = $this->Arti…

ブログチュートリアル1での文字化け

ブログチュートリアル 下記の方法で文字コードを指定してやる必要があります。 CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL) char…

PHPStormのfield accessed via magic methodについて

CakePHPでマジックメソッドを使う時に出る。フィールド変数が無いから気をつけろということだそうだ。 PHPStormの設定で警告を抑制する方法と、アノテーションを書く方法がある。 www.thinkingmedia.ca アノテーションだとこんな感じ。 use App\Model\Table\…

TableとEntityが別れている理由

ブログチュートリアル - パート2 CakePHP のモデルクラスのファイルは、 Table オブジェクトと Entity オブジェクトに分離して 存在します。 なぜわざわざ分けたのかとググると Why did cakephp v3 split the Model into Table and Entity? What are the adv…

PHPStormにcomposer.pharを設定 in Windows

Composerをインストールしていてコマンドプロンプトで使用出来ている場合、 where composerとコマンドプロンプトで打てば composer.pharが存在するディレクトリが分かります。 こんな感じです。 C:\Users\ユーザー名>where composerC:\ProgramData\ComposerS…

PHPStormでのCakePHPにてDetect PSR-0 namespace rootsが出た時

CakePHP3のブックマークチュートリアルのUserモデルをPHPStormで編集していると Detect PSR-0 namespace roots: Do you want to configure namespace roots? It can be done automatically or manually at Settings | Directories. という警告が右下に出た。…