Laravel

Laravel

Laravelはもっとも注目を浴びている、PHPフレームワークの一つです。
普及スピードが速く日本国内外で今後ユーザー数が伸びてくることが予想されています。

フルスタックのWebアプリケーションフレームワークで、ルーティング、リエクスト処理、ビュー、クエリビルダー、ORM、DI、認証等のユーザ管理、ユニットテスト、ブラウザテストなどのフレームワークが要求される一通りの機能を実装しています。
コンソールからArtisanコマンド(Ruby on RailsのrailsコマンドやCakePHPのBakeコマンドに相当)を利用し、コントローラやビューの雛形の作成、データベーススキーマの作成等、一通りの作業を行うことができるため、素早く開発を開始することが可能です。

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...
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を提供し、開発者...
Laravel

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

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

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

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

laravel8のUnitTestでfackerが使えない

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

[Laravel]孫の集計を行う

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

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

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

Laravelのモデルを共通化する(Scope)

Queryの共通化例えばこんなQueryがあったとして$users = \App\User::where('age', '>=', 20)->whereDate('created_at', today())->get();modelでpub...
Laravel

model::update()で更新するとObserverでキャッチできない

LaravelにObserverという機能があって、モデルが作成されたり変更された時のイベントコールバックを登録することができるのですが、なぜかUpdate時のイベントがキャッチできない問題に遭遇しました。原因単一モデルじゃないとキャッチで...
Laravel

observerをキャンセルする

Laravelにはobserver機能があって、Modelに書き込みが会った時のイベントをキャッチして何かやらせるということができます。CakePHPで言うところのafterSave()みたいなものですね。Observer自体は公式マニュア...
Laravel

[Laravel Mix] 型定義ファイル(.d.ts)を作ったら”TypeScript emitted no output”エラーになる

環境Laravel-mix 6Vue 2.7型定義ファイルがないモジュールがあったので、@typeフォルダを作って型定義ファイルを入れてビルドしてみたが・・・Module build failed (from ./node_modules/...
Laravel

Laravel adminでユーザーのパスワードを管理する

Laravel Adminを使ってユーザーの情報を管理したい場合があると思います。ただ、FormやModelが通常とは違いAdminで独自なので、前処理、後処理をどうやってけけばいいのか悩みますね。結論から言うとこんな感じにすると良いかと思...