CakePHP
拡張子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')->setForeignK…
intではなくcharに数字を入れているとき 1 10 ~~~~~ 19 2 20 とソートされる。 自然順にソートするのは $answers = $this->TfAns->find() ->where(['TfAns.regnum = ' => $regnum]) ->toArray();$answers = new Collection($answers);$answers = $answers->s…
貧欲なスター (greedy star) /* に加えて、 /** 流れ星 (trailing star) 構文が あります。2つのアスタリスクをつなげると、URL の残りを1つの引数として取り込みます。 これは、 / を含む引数を使用したい時に便利です。 $routes->connect( '/pages/**', …
データ検索をマスターする!(4/6):初心者のためのCakePHP3 プログラミング入門 //find()にQueryExpressionを使うサンプルpublic function find() { //絞り込んだ結果のエンティティ配列 $persons = []; //リクエストの種別がPOSTであるなら if ($this->reque…
クエリビルダにおいて、innerJoinWith()やleftJoiinWith()でJOINしたものをテンプレートで表示するためには $tenancy->_matchingData['Tenants']->stage stackoverflow.com のように書きます。 もし不安な場合はdebugメソッドもしくは$tenancyのみで出力し確…
$bookmarks = $this->Bookmarks->find('tagged', [ テーブルのfindメソッドの第一引数が重要。 たとえば上記のようにBookmarks->find('tagged',のようになっているときは、BookmarksTableクラスのfindTaggedメソッドを探しに行く。 ここで見つからないときUn…
結論はこれ。 [CakePHP3] Setter(セッター)とGetter(ゲッター)をざっくりと知る。 – gomokulog 以下補足。 C#にはプロパティという機能がある。プロパティを実装すると、メンバ変数 x を持つクラスAがあるとき、a.x としても自動的にgetX()が呼び出されると…
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…
CakePHPはMVCであり、その内のモデルを2種類に分けたものがテーブルとエンティティです。ざっくり言うとテーブルとはそのままDBのテーブル(集合)を表し、エンティティとは各行を表します。 テーブルクラスにはDBとの通信に必要な情報が保持されているため、D…
contain 関連をイーガーロード (eager load) するように定義します。 データの取り出しと結果セット イーガーロードとは、N+1問題を回避する手段らしい。 まず、N+1問題とは? ユーザーマスタと、著者のユーザIDを属性としてもつ記事テーブルがあるとします…
Templateディレクトリに間違った名前のディレクトリを作成してしまった。 具体的には単数形にしてしまっていた。 その後、PHPStormのリネーム機能でディレクトリ名を複数形にした。 すると、どのページにアクセスしてもUnable to find ~ panel.とエラーメッ…
New router goodies » Debuggable - Node.js Consulting によると、 そもそもリンクの書き方は、文字列での指定と、連想配列での指定の2つがある。 ①文字列の場合$html->link('My post title', '/posts/view/5' ); ②連想配列の場合$html->link('My post titl…
ブログチュートリアル - パート2 echo $this->Form->create($article); は、 echo $this->Form->create();としても動いているようにみえるけれど、 ArticlesControllerのsaveで例外(DB接続失敗、バリデーションエラー等)が起きた際、 $article = $this->Arti…
ブログチュートリアル 下記の方法で文字コードを指定してやる必要があります。 CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL) char…
CakePHPでマジックメソッドを使う時に出る。フィールド変数が無いから気をつけろということだそうだ。 PHPStormの設定で警告を抑制する方法と、アノテーションを書く方法がある。 www.thinkingmedia.ca アノテーションだとこんな感じ。 use App\Model\Table\…
ブログチュートリアル - パート2 CakePHP のモデルクラスのファイルは、 Table オブジェクトと Entity オブジェクトに分離して 存在します。 なぜわざわざ分けたのかとググると Why did cakephp v3 split the Model into Table and Entity? What are the adv…
Composerをインストールしていてコマンドプロンプトで使用出来ている場合、 where composerとコマンドプロンプトで打てば composer.pharが存在するディレクトリが分かります。 こんな感じです。 C:\Users\ユーザー名>where composerC:\ProgramData\ComposerS…
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. という警告が右下に出た。…