PHP

PHP PHP
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_lo...
CakePHP

CakePHPがひどすぎる件

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

[CakePHP5]CSRF無効化

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

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

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

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

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

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

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

LaravelでEloquentのSQLを確認する

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

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

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

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

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

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

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

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

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

Eloquentの便利機能

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

配列のキーが歯抜けだとlengthがundefindになる

axiosで受け取ったレスポンスのサイズを見るためにlengthプロパティーを参照したら何故かundefindになってしまいました。 理由 バックエンド側のレスポンスで { 0: { id: 1 }, 3: { id: 3 }, 5: { ...
Laravel

[Laravel]更新されたフィールドがあるかどうか判定する

編集フォームで、変更があった場合だけ何かするというような処理はありがちだと思いますが、そういったときに便利な機能があります。 Model::isDirty() メソッド を使うと、変更があったかどうかのBool値を返してくれます。引数にフィ...
Laravel

LaravelAdminで複数カラムのUniqueValidationを行う方法

LaravelAdminで複数カラムのUniqueValidationを行う方法がわからなかったので調査しました。 前提 環境は Laravel8 ユーザーにタグを付与する場合を例にします。 テーブル構成はこんな感じ users tags ...
Laravel

laravel8のUnitTestでfackerが使えない

UnitTestとFactoryを作成してテストを実行してみたら Unknown formatter "関数名" faker というエラーになってFakerが使えなかった。作成時に利用したコマンドはこんな感じ artisan make:te...
Laravel

[Laravel]孫の集計を行う

Laravelで孫テーブルの集計をしたい場合は hasManyThrough を使ってリレーションを定義した上で、hasManyThroughで定義したリレーションに対してwithCount()などの集計関数を使う。 具体的にはこんな感じ ...
Laravel

[Laravel]WebAPIの内容がソートされていない

LaravelでCollectionでソートしたデータをJSONで返却して、JavaScriptで表示させたが、なぜかソートされていない。 理由 JSONオブジェクトは連想配列は順番は保証されずキー名基準になるため無意味。 Collecti...