ふくだ学習録とは?
ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。
読了した本
データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]
ゼロから作るDeepLearning
今読んでいる本
CakePHP3入門を読んで
外部キーの命名規則
外部キーは、エンティティ名_id
といった名前でつける。
例えば。boardsテーブルに外部キーを作り。peapleテーブルを関連づける場合、person_id
という名前で外部キーフィールドを作成する。
※テーブル名(複数形)ではなくエンティティ名(単数形)になるところを注意。(まぁレコード単位で結びつけるわけやから妥当)
CakePHPのJOIN
テーブルを連携するJOINコマンドにはいくつかの種類がある。
LEFT JOIN
元となるテーブルを左側におき、右側にテーブルを結合させる。
左側のテーブルでは、右側に結合対象のレコードがなくても全て表示する。
RIGHT JOIN
元となるテーブルを右側におき、左側にテーブルを結合させる。
右側のテーブルでは、左側に結合対象のレコードがなくても全て表示する。
INNER JOIN
左右両方のレコードが存在するレコードのみが表示される。
hasOneによる1対1結合
1対1の関係の時にhasOne()
を用いて結合できる。
※結合先に対となるレコードがない場合、空のレコードが設定される。
元テーブル側に、下記の記載を行う。
public function initialize(array $config){
this->hasOne( 関連テーブル, 連想配列 );
}
# 連想配列には下記のようなものを入れる。
[
'className' => 'クラス名',
'conditions' => '設定の連想配列',
'sort' => '並び順の指定',
'dependent' => '削除設定の真偽値', # レコード削除した時に、結合側のレコードも消すかどうか
'joinType' => 'JOINタイプの指定', # LEFT JOINか、INNER JOINかを指定する。
'foreignKey' => 'キーとなるフィールド名' # 結合先のキーとなるフィールド名を指定する。
]
Eager Loading、Lazy Loadingとは?
Eager Loading
アソシエーションで関連付けされたテーブルをJOIN結合して、データを取得する。
複雑なクエリ(1回のクエリで様々な処理を行う)場合に使用される。
ただしメモリを大量に使うことになるので、多対多の関係には使用しないようにするべき。
Lazy Loading
アソシエーションで関連付けされたテーブル情報に関しては、必要なタイミングで直接そのテーブルにクエリを投げる手法。つまりJOIN結合は行わない。
そのためメモリの使用量は少なくなるが、動作がもっさりする可能性がある。
ORM の eager loading と lazy loadingについて
Eager Loadを行うためのcontain
contain()
メソッドを使用することで、関連データをEager Loadingして取得できるようになる。
->contain(['Boards']); # BoardsテーブルをJOIN結合させている。
hasManyによる1対t多結合
hasMany();
メソッドを使用する。
関連付けされている側からの参照 belongsTo
関連付けされている側からは、belongsTo();
と記述して元のテーブルのレコード情報を取得していく。
public function initialize(array $config){
this->belongsTo( 元テーブル, 連想配列 );
}
TableRegistryについて
TableRegistryは、テーブルの登録を行うクラスで、getは引数に指定したテーブルを取得し使えるようにする。
Cakeは命名規則から、テーブルとコントローラの関係性を判断するため。コントローラから違う名前のテーブルを使用しょうとしても使えない。そのためTableRegistry::get('People')
といった記載をすることで、テーブルを使用できるようにする。
HTMLヘルパー
キャラクタセットの指定
$this->Html->charset('utf-8');
↓出力
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
スタイルシートの指定
$this->Html->css('hello');
↓出力
<link rel="stylesheet" type="text/css" href="/cake3app/css/hello.css">
METAタグ
$this->Html->meta( タイプ, URL, 属性指定 );
タイプ
METAタグの種類
URL
URLの指定
属性指定
タグに用意する各種の属性。属性名をキーとする連想配列として格納する。
__( テキスト )表記に関して
CakePHPでは、<?= __('テキスト') ?>
といった表記で記載することによって、そのテキスト部分を必要に応じて翻訳してくれる。翻訳データがなかったりした場合は、カッコ内のテキストが表示される。
①翻訳データを記述したリソースファイルの作る。
$ bin\cake i18n
を実行して、ファイル作成のためのプログラムを実行していくと、指定したディレクトリにdefault.pot
というファイルができる。
ここには下記のような記載がされている。
msgid "メッセージID"
msgstr "翻訳するテキスト"
この「メッセージID」が、__()
内に記載したもの。
また「翻訳するテキスト」と記載している部分がデフォルトの翻訳データになる。
②各国語のリソースファイルを用意する
翻訳のリソースファイルは、デフォルトではsrc/Locale
配下にできる。
そのLocale配下に、さらにそれぞれの言語用にフォルダとリソースファイルを作成する。
例えば「日本語」と「英語」の2つを用意する場合は、src/Locale/ja_JP
とsrc/Locale/en_US
というフォルダを作成して、それぞれのフォルダに先ほどのdefault.pot
をコピーして名前をdefault.po
に変更したファイルを格納する。
その後、それぞれのファイルのmsgstr
部分を翻訳したい言葉に書き換える。
デフォルトの言語設定
app.php
内に記載されている、
env('APP_DEFAULT_LOCALE', 'ロケール値')
という部分の「ロケール値」をja_JP
などのように書き直す.
ナビゲーションリンクのカスタマイズ
Paginatorを使用すると、簡単にページ移動リンクを作成できるが、タグ構造やスタイル変更は少し難しくなってしまう。独自カスタマイズをしたい場合は、専用のテンプレートを用意し、Viewクラスで読み込むことで対応できる。
①my-paginator-temp.phpの作成
config
フォルタ内に、my-paginator-temp.php
という名前でファイルを作成する。
ファイル内は、下記のように記載する。
<?php
return [
'number' => '<span style="border:solid">
<a href="{{url}}">
{{text}}
</a>
</span>',
'current' =>'<span style="border:solid">
{{text}}
</span>'
];
②Viewクラスでテンプレートをロードする
src/View/AppView.php
で下記の記載をする。
public function initialize() {
$this->loadHelper('Paginator', ['templates' =>
'my-paginator-temp']);
}
今日の一言
理解していることが増えてきたし、概念的な部分は終わってきたから、記載量減ってきた!いい兆候!
あとはphp実行時の流れをもう一度理解したい!下記記事がいいとのことだったので、これを読む!