PHP

PHP
MacOS

brewのPHPのバージョンを変更する

Macの開発でいつの間にかPHPのバージョンが上がっていて不具合が起こってしまったのでバージョンを変更する。PHP8.3にする場合はこんな感じでbrew install php@8.3brew unlink phpbrew link --f...
Laravel

[Laravel]外部キー制約が削除できない

Laravelで外部キー制約を削除する場合、マイグレーションのupメソッドでpublic function up() { Schema::table('{テーブル名}', function (Blueprint $table) { $tab...
Laravel

あえてEager Loadingしないほうが早い場合

Laravelでリレーション先のレコードを一緒に取得したい場合。リレーション先取得のクエリが大量に発行されてしまうのを防ぐには、withメソッドを使います。withメソッドを使うことで複数レコードの取得でも1回のクエリでリレーションが取得さ...
Laravel

[Laravel] Eloquent(QueryBuilder)で使うINDEXを強制する方法

MySQLなどのDBではIndexの有無によってパフォーマンスがかなり変わります。Indexは自動的に最適なものが選択されるはずですが、気まぐれでおかしなIndexが利用されて動作が極端に遅くなってしまうことがあります。そんな時はFORCE...
Laravel

[Laravel]queryのSQLを得る方法

Queryオブジェクトの発行予定のSQLを得る方法です。$sqlDump = preg_replace_array('/\?/', array_map(function($n) { return "'".$n"'";}, $query->g...
CakePHP

[CekePHP5]Tableクラスのメソッド存在チェック

こちらの記事でコントローラーのメソッドの存在チェック方法について書きましたが、Tableクラスでメソッドが存在するか調べる方法についてはまた事情が違うようでした。Tableクラスに実装したメソッドに関してはmethod_exists()で可...
CakePHP

[CakePHP5]Modelイベントがなくなってる?

レコードの保存時などのイベント取得でCakePHP4以前ではafterSave()とかbeforeFind()とか、そいういうメソッドをTableクラスに定義するとそこでイベントを受け取ることができました。ですが、CakePHP5でやってみ...
CakePHP

[CakePHP]メール送信で”Could not send email: unknown”

CekePHP5でメール送信したら"Could not send email: unknown"という謎のメッセージが出る。原因EmailTransportのclassNameの設定を確認する。app.php(もしくはapp_local.p...
CakePHP

CakePHPがひどすぎる件

久々にCakePHP触ったんだけど、5になってリファレンスのインチキ度が増していますので、全く信用できません。CakePHP4とかのときに削除された機能がそのまましれっと書いてある。とにかく、名前が変わっただけとか無意味な変更がおおくて非常...
CakePHP

[CakePHP5]CSRF無効化

CakePHP5でCSRFを無効化する方法がハマったのでメモ。結論先に結論だけ述べると、FormProtectionComponentを使えダウトな情報その1SecurityComponent はCakePHP4.2ぐらいのころになくなった...
CakePHP

オブジェクト内のプロパティー存在チェックに引っかからない場合

CakePHP5/PHP8.1でコンポーネントがロードされているかどうか調べるためにif(isset($this->Auth)){}というようなコードを書いたが、なぜかfalseになる。その他のmethod_exists()などの類似の関数...
CakePHP

[CakePHP5]Security.saltが取得できない。

CakePHP5でSecurity.saltを利用したかったのですが、なぜか取得できません。設定してあるのになぜだろう?と、30分ぐらい悩んだのですが原因判明config/bootstrap.php で消してました。Security::se...
CakePHP

CakePHP5でコードをきれいに保つ

コードのスタイルを統一しておくことは、品質の良いコードを保つのに必須要件です。ですが、コーディング規約をいちいち気にしながらコードを書くのは非常にストレスになります。ということで、できるところは機械に任せちゃいましょう。CakePHP5でコ...
docker-compose

Composer で処理中にタイムアウトになるのを防ぐ

docker-compose系のコマンドが長くてめんどくさいのでcomposer.jsonにscriptを書いたのですが、いつの間にか強制終了されてしまいます。composerで長い時間の処理をさせようとすると、300秒でタイムアウトして強...
Laravel

LaravelでEloquentのSQLを確認する

Queryビルダーで作ったSQL文を確認したいときにはtoSQL()メソッドを使います。プレースホルダーの値も取得したい場合はgetBindings()メソッドを使います。$query = User::where('id',1);var_d...
Laravel

Laravelで複数レコードを一括で更新する

Laravelで1度のQueryで複数のレコードを一括で更新したい時は,upserts()メソッドを使います。Flight::upsert([,], , );第1引数に配列第2引数に検索キー第3引数に変更したいカラムを指定します。updat...
Laravel

Laravelのリレーション先のモデルを取得するときは基本的にはwithを使え

Laravelでリレーション先のモデルを結合して受け取る方法は3種類ありますが、リレーション先のモデルを効率的に取得するために、withメソッドを使用することが推奨されています。なぜでしょうか?withメソッドを使ってアクセスするwithメ...
Laravel

laravel Eloquent updateOrCreate()でmodelを更新する

LaravelのupdateOrCreateメソッドは、指定した条件に基づいてデータベース内のレコードを更新するか、存在しない場合は新しいレコードを作成します。このメソッドは非常に便利で、以下のようなシナリオで使用することができます。既存の...
Laravel

laravelのcollectionでfilterを使った時はかならずvalues()を呼ぶ

laravelのcollectionでfilterを使って絞り込んだときは、必ずvalues()を呼びましょう。こんな感じに。$new = array.filter(function(value){ return (何か条件式);}).va...
Laravel

Eloquentの便利機能

EloquentとはLaravel Eloquentは、PHP構文を使用してデータベースとやりとりすることができるORM(Object-Relational Mapping)です。データベースとの作業に対してシンプルなAPIを提供し、開発者...