Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

諸事情あって、バタバタしているyandoです。 18時過ぎに自分の番である事に気がついてしまいましたが、この記事はCakePHP アドベントカレンダーの9日目です。 CakePHP3で一新されたORMは「結果が配列からオブジェクトになった」というだけではない違いがあります。 それが Eager loading と Lazy loading です。この概念を理解していないとORMの機能を間違って使ってしまうかもしれません。 何が起きるの? N+1問題 ORMからクエリを実行した時にJOINを使ったクエリを実行するか、シンプルなクエリを実行するかのルールが分かりますか? 従来のCakePHPではJOINの条件などに応じて自動的に決定されており、関連データを取得するためのクエリが大量に実行される場合がありました。たとえば画面に表示している20件のデータを取得するクエリを実行し、その後に20件のデ
CakePHP3を控えてCakePHP2ネタもいまさら感ありますが最近苦労したところのまとめです。 環境 開発 CakePHP2でWebシステムを開発。 開発者はそれぞれGitリモートリポジトリをクローンして手元で開発をしている。 サーバ構成 GitリモートリポジトリはGitLabを使って社内ネットワークに設置。 本番サーバはインターネット上(AWS)に2台ある。 2台の本番サーバは一部のディレクトリを共有してファイルアップロードに使用している。 本番サーバはGitLabサーバのインストールされたサーバからChefを使って管理している。 やりたいこと Gitリモートリポジトリの特定ブランチに更新をPUSHした時にファイルを本番環境に反映したい。 CakePHPのモデル等キャッシュを削除するためにファイルの本番環境反映後に本番サーバ上でシェルスクリプトを実行したい。 設計 chefユーザは対
はじめに bootstrap.phpにドメインによって設定を切り替わる処理を記載していたのですが、 リリース事故が起きそうな気がしたので、色々試してみて、下記をアレンジした方法に落ち着きました。 参照:CakePHPで開発環境と本番環境の切り替え app/Config/Env/以下に環境判別用のファイルを作成して、読み込む設定ファイルを切り替えます。 (開発環境は設定しなくてOK!) 組んでみる 下記のファイルを作成 ・環境確認用:app/Config/Env/[CAKE_ENV] (空ファイルでOK) ・環境別設定ファイル:app/Config/[CAKE_ENV]/envConfig.php ・環境別DBファイル:app/Config/[CAKE_ENV]/database.php(app/Config/database.php.defaultのフォーマットでOK)
参考:PHPでCSVを生成する 現実的な方法として、一旦メモリ上にCSVを作成してから出力する方法とCSV形式を都度出力する方法がある。 ##一旦メモリ上にCSVを作成してから出力 都度で出力に比べ一旦作ることで、Content-lengthを出力することができるので、ブラウザの「ダウンロード残り時間」を表示できる。 一旦ファイルにCSVを作成してからreadfileで出力する方法は、ディスクIOが大きくパフォーマンスに問題があるので、一旦作るならメモリ上に作成するのが良い。 ###PHPでの書きかた //メモリ上に領域確保 $fp = fopen('php://temp/maxmemory:'.(5*1024*1024),'r+'); $user_list = [ [...], [...], [...], ]; foreach($user_list as $user){ fputcsv(
CakePHPではパフォーマンス向上のため、app/tmp/cacheにキャッシュファイルを持っている。 core.phpのデバッグレベルを0にした状態で、テーブル定義を変更すると、テーブル定義のキャッシュと不整合のためエラーになる場合がある。 デバッグレベルを0にした状態(本番環境)でテーブル定義を変更した場合の対策をまとめる。 1.デバッグレベルを1以上にしてアクセス デバッグレベルを1以上の場合、都度キャッシュファイルが書き換わるので。 2.app/tmp/cache配下のキャッシュファイルを削除 まんまキャッシュファイルを削除 3.キャッシュファイル削除用のコンソールを作成実行 デプロイ時にコンソールを実行してキャッシュを削除する。 自分のところではこれを採用している。 class CacheClearShell extends AppShell { function main()
<?php App::uses('AppHelper', 'View/Helper'); class MultiCrumbsHelper extends AppHelper { public $helpers = array('Html'); private $crumbsList; public function __construct(View $view, $settings = array()){ parent::__construct($view, $settings); } public function setCrumbs($crumbs = array()) { $this->Html->_crumbs = array(); if (empty($crumbs)) { return; } foreach ($crumbs as $crumb) { $name = $link
About reserved postingIf you register a secret article by the day before the same day, it will be automatically published around 7:00 on the same day. About posting periodOnly articles submitted after November 1 of the year can be registered. (Secret articles can be registered anytime articles are posted.)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く