自分用です。
忘れてぐぐりがちなこと覚え書き
phpの関数とかもあるかもしれない
随時更新予定
クックブック
https://book.cakephp.org/3/ja/index.html
#クエリビルダー
https://book.cakephp.org/3/ja/orm/query-builder.html
https://www.ritolab.com/entry/67
https://qiita.com/morisuke/items/e466d2ab360ab5646e9a
##クエリ
$query = $this->HogeModel->find() //ここまでテンプレ
->select(['id', 'title']) //取得するフィールド名
->where($conditions) //取得条件
->order($order) //order
->limit($limit); //取得件数
##取得するデータ形式指定
$result1 = $query->all(); //全件取得(返り値はObject型)
$result2 = $query->toList(); //全件取得(返り値はList型)
$result3 = $query->toArray(); //全件取得(返り値はArray型)
$result4 = $query->first(); //先頭の一件のみ取得
##conditionの書式
###AND
//where id = 0 and title = 'aaa'
$conditions = [
'Hoge.id' => 0,
'Hoge.title' => 'aaa'
];
###OR
//where id = 0 or title = 'aaa'
$conditions = [
'OR' => [
'Hoge.id' => 0,
'Hoge.title' => 'aaa'
]
];
###NOT
//下記両方とも結果は同じ
//where id is not 0
$conditions = [
'Hoge.id IS NOT' => 0
];
//where id != 0
$conditions = [
'Hoge.id !=' => 0
];
###IN
//where id in (0, 1, 2)
$conditions = [
'Hoge.id IN' => [0, 1, 2]
];
##joinの書式
$join = [
'table' => 'fuga', //joinするテーブル名(Model名ではないので注意)
'alias' => 'f', //エイリアス
'type' => 'inner', //タイプ(inner || left || right)
'conditions' => ['f.id = Hoge.fuga_id'] //一致条件
];
//fieldを指定しないとjoinしたテーブル(ここではfuga)のデータが取れなかった…仕様?
$fields = [
'hoge_id' => 'Hoge.id',
'hoge_title' => 'Hoge.title',
'fuga_id' => 'f.id',
];
$result = $this->find()->join($join)->select($fields)->all();
#ログ
$this->log()はControllerでのみ使える
##Controllerでの使い方
$this->log("message", LOG_DEBUG); //デバッグログ
$this->log("message", LOG_ERROR); //エラーログ
##それ以外での使い方
use Cake\Log\Log;
Log::debug("message"); //デバッグログ
Log::error("message"); //エラーログ
##パスの設定
デフォルトパスは{PJルート}/logs/
以下で、app.phpの下記設定を変更すればパスを変更できる
下記の「path」の値を変えればOK
LOGS
は定数で、上記デフォルトパスを示す
/**
* Configures logging options
*/
'Log' => [
'debug' => [
'className' => 'Cake\Log\Engine\FileLog',
'path' => LOGS,
'file' => 'debug',
'url' => env('LOG_DEBUG_URL', null),
'scopes' => false,
'levels' => ['notice', 'info', 'debug'],
],
'error' => [
'className' => 'Cake\Log\Engine\FileLog',
'path' => LOGS,
'file' => 'error',
'url' => env('LOG_ERROR_URL', null),
'scopes' => false,
'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
],
]
##ログが出てない!
出力パスがデフォルトなのにログが出力されない場合、権限が原因の可能性が高い。
sudo chmod -R 777 logs
とりあえずこれ叩いてログが出るか確認、出てたら適切な権限にちゃんと修正
#キャッシュ削除
##コマンドから削除
https://qiita.com/akido_/items/cd110f46de7b2d33240c
$ cd {PJルート}
$ bin/cake cache clear default //特定のprefixだけ削除
$ bin/cake cache clear_all //全部削除
##メソッドで削除
https://api.cakephp.org/3.4/class-Cake.Cache.Cache.html#_delete
use Cake\Cache\Cache;
Cache::delete(string $key , string $config = 'default');
clearだと「特定configのキャッシュを全て削除」になるっぽい
#php.iniの場所
https://qiita.com/ritukiii/items/624eb475b85e28613a70
$ php --ini
or
$ php -i | grep php.ini