PHP

PDO と プリペアドステートメント(使用|未使用)時のデータ取得の流れ

ドキュメント PHP Data Objects note what PDO (PHP Data Objects) データベース抽象化レイヤ 解決したい問題 mysql_connect でDB(MySQL)に接続した場合、別のDBに変わった場合に、pg_connect への変更が発生する PDO データベースが変わっても同じ命令でデ…

PHP: メモリ使用量の確認方法

note CakePHP の場合は、app/webroot/index.php の先頭と最後に下記のコードを差し込んで確認した https://www.php.net/manual/ja/function.memory-get-usage.php https://www.php.net/manual/ja/function.memory-get-peak-usage.php //ini_set('memory_limi…

Laravel 6.x : 外部パッケージを Facade で利用する方法

利用したいパッケージ http://image.intervention.io/ ドキュメント ファサードの仕組み (スタンドアロンの) 外部パッケージをファサードで利用する方法 // プロジェクトが依存するパッケージを追加 (`composer require intervention/image`) //composer.jso…

Laravel 6.x: Routeのテスト (各URL毎に期待したアクションが実行されるかどうか)

2020/09/11 追記: 別の方法 に変更しました。 sample final class XxxxRouterTest extends TestCase { public function RouteActionNameDataProvider() { return [ [ 'get', '/user/1', //テスト対象のURL UserViewController::class, //URLをリクエストした…

Laravel 6.x : UnitTest で テスト用のDBを利用

note test用のDBを作成する CREATE DATABASE `xxx_testing`; test用DBの接続設定 phpunit.xml + .env.testing RefreshDatabase トレイトでマイグレーションを実行 RefreshDatabase トレイトの機能 テスト実行時に自動的にマイグレーションを実行 テスト中に…

PHPUnit: private property の値をテストする

$this->getHiddenProperty() を利用する class Hoge { private $hidden; final class HogeTest extends TestCase { /** * @test */ public function プライペートプロパティのテスト() { $hoge = new Hoge(); $this->assertEquals( 'expected value', $this-…

Laravel 6: ログイン試行回数, ロック時間 の規定回数とエラーメッセージを変更

バージョン Laravel: 6.16.0 ログイン試行回数, ロック時間 の既定値を変更 app/Http/Controllers/Auth/LoginController.php のメンバ変数に $maxAttempts $decayMinutes を追加 class LoginController extends Controller { use AuthenticatesUsers; // 追…

PHPUnit: 最初にエラーが発生した時点で実行を停止

$ vendor/bin/phpunit --stop-on-error #最初にエラーが発生した時点で実行を停止 こっちのが便利かも $ vendor/bin/phpunit --stop-on-failure #最初にエラーあるいは失敗が発生した時点で実行を停止 ドキュメント コマンドラインのテストランナー

CakePHP3: 同じSQLを複数実行しないように

ドキュメント Cake\ORM\Table::get($id, $options = []) メモ 下記の場合、同じクエリが2回実行されている $category_id = $this->Articles->get(1)->categoriy_id; $author_id = $this->Articles->get(1)->user_id; 下記のようにすれば、クエリ1回の実行で…

FriendsOfCake/crud: findMethod() の引数

メモ: FriendsOfCake/crud: findMethod() の引数 public function index() { $this->Crud->action()->findMethod([ // カスタム Finder メソッド を指定 // See: Crud - findMethod 'myCustomFinder' => [ // Cake\ORM\Table::find($type, $options = []) の…

CakePHP3: マイグレーションでカラムの型を string から uuid に変更

試行錯誤したのでメモ。もっとシンプルな方法があると思う。。 ドキュメント カラムの属性を変更 作業ログ public function change() { $this->table('hoges') ->changeColumn( 'foo_column', 'uuid', [ 'null' => false, ] ) ->save(); } ↑ ではうまく行か…

CakePHP3: クエリビルダーで SUM(CASE WHEN)

こんな感じの SELECT 文を作りたい場合は、 SELECT user_id AS "user_id", (SUM( CASE WHEN hoge < 3 THEN count END )) AS "A", (SUM( CASE WHEN hoge >= 10 THEN count END )) AS "B" FROM articles GROUP BY user_id こんな感じ $query = $articles->find…

CakePHP3 (3.2以降): クエリビルダーで DATE 型のフィールドを取得すると、Cake\I18n\FrozenDate オブジェクトが返される

クエリビルダで DATE 型のフィールドを取得すると、Cake\I18n\FrozenDate オブジェクトが返される 同じく、DATETIME 型を取得すると、Cake\I18n\FrozenTime オブジェクトが返される サンプル var_dump( $query->find()-> .... ->get('field_date') ); //fiel…

CakePHP3: 行ロック(SELECT 〜 FOR UPDATE)

BEGIN; SELECT 〜 FOR UPDATE; /* COMMITするまで選択した行をロック*/ UPDATE 〜; COMMIT; これを CakePHP3 で行うと ConnectionManager::get('default')->transactional(function () use ($id) { $query = $this->TableClass; $query->find()->where(['id'…

CakePHP3: $validator->scalar() は integers, floats, strings, booleans, を許可する

This method will accept integers, floats, strings and booleans, but not accept arrays, objects, resources and nulls. See: https://api.cakephp.org/3.5/class-Cake.Validation.Validation.html#_isScalar

CakePHP3: ディレクトリを指定してマイグレーションを実行

備忘録 See: https://book.cakephp.org/migrations/2.x/ja/#migrate # デフォルトで、マイグレーションファイルは、 **config/Migrations** ディレクトリーに # あります。 ``--source`` オプション (省略形は ``-s``) を使用することで、 # ディレクトリー…

CakePHP3: Migrations でテーブルを Drop する

備忘録 ->save() を忘れない See Phinx - Dropping a Table Note that like other methods in the Table class, drop also needs save() to be called at the end in order to be executed. サンプル 例: tests テーブを削除 /// 空のマイグレーションファイ…

CakePHP3 の $validator->integer() は string の '1' を許可する

備忘録 CakePHP3 の $validator->integer() は string の '1' を許可する ソースは以下 See \Cake\Validation\Validation::isInteger() https://api.cakephp.org/3.8/class-Cake.Validation.Validator.html#_integer This method will accept strings that c…

(インスパイア) テスト駆動開発 の 第Ⅰ部 を PHP で写経

写経しました https://github.com/tamurayk/tdd-php インスパイア https://blog.shin1x1.com/entry/tdd-by-example ひとまず 第Ⅰ部 を実践しました PHPでどう書いてよいか解らず、手が止まったときは shin1x1/book-tdd-php をお手本にさせていただきました …

composer install 時のエラー

PHP

経緯 ざっくり言うと、PHP公式 Docker の 7.1-fpm をベースに composer を追加した Docker イメージを作成していた その際、composer install 時のエラーでハマったので備忘録 # composer install --dev Do not run Composer as root/super user! See https:…