カテゴリー
Linux

Laravel 5.8。インメモリの SQLite で PHPUnit テストを行う設定

設定まとめ

  • config/database.php の 'driver' => 'sqlite' の database の値として :memory: を指定する。
  • phpunit.xml の env に name="DB_CONNECTION" value="sqlite" を追加する。
カテゴリー
Linux

Laravel 5.8 。 migrate が MySQL の場合は問題ないのに SQLite では失敗する現象の原因と修正

対処方法まとめ

  • マイグレーションファイルにて、メソッドチェーンで絡むの後にインデックスをつなげる場合は、インデックスのメソッドの引数を指定しない。
  • 例えば、 $table->string('meta_key')->nullable()->index('meta_key'); ではなくて、 $table->string('meta_key')->nullable()->index(); とする。
カテゴリー
Linux

Laravel 5.7 を 5.8 へアップグレードした手順メモ

カテゴリー
Linux

Laravel 5.6 を 5.7 へアップグレードした手順メモ

カテゴリー
Linux

Laravel 5.5 を 5.6 へアップグレードした手順メモ

カテゴリー
Linux

【Laravel 5.5】WordPress の DB を使ってお勉強。モデルの日時プロパティを楽に扱えるようにする方法

学んだこと

カテゴリー
Linux

【Laravel 5.5】WordPress の DB を使ってお勉強。投稿に紐づくカテゴリーを取得して表示する

学んだこと

カテゴリー
Linux

Laravel 5.8 で多対多構造を belongsToMany の引数をほぼ使い尽くしてなんとしてでもリレーションを実現する方法

Laravel 5.8 における belongsToMany の引数まとめ

  • 第 1 引数では最終的な接続先モデル名を名前空間含めて指定する
  • 第 2 引数では中間テーブル名を指定する
  • 第 3 引数では接続元モデル ID を示す中間テーブル内のカラム名を指定する
  • 第 4 引数では最終的な接続先モデル ID を示す中間テーブル内のカラム名を指定する
  • 第 5 引数では接続元モデル ID のカラム名を指定する
  • 第 4 引数では最終的な接続先モデル ID のカラム名を指定する
カテゴリー
Linux

【Laravel 5.5】WordPress の DB を使ってお勉強。投稿に紐づく投稿者情報をパッと取得する

学んだこと

  • aaa テーブルに xxx_id カラムがある場合、 xxx を取得するには belongsTo() を使う。 aaa モデルクラスで次のように使う。なお、 xxx テーブルのプライマーキーは id とする。
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Aaa extends Model
{
    public function xxx(): BelongsTo
    {
        return $this->belongsTo('App¥Xxx', 'xxx_id', 'id');
    }
}
  • リレーションへはメソッドとしてもアクセスできるが、プロパティとしてアクセスでき、そのほうが性能が有利になる。なぜなら、実際にアクセスされた時にだけそのリレーションのデータはロードされる (遅延ロード) ため。
  • Eagerロード で N + 1 問題を回避できる。今回の例では、投稿一覧の取得で 1 回、取得できた 5 件の投稿の各ユーザを取得するのにさらに 5 回、 SQL が発行されていた。それを、 Eager ロードすることによって、 2 回の SQL 発行へ減らすことができた。
カテゴリー
Linux

【Laravel 5.5】WordPress の DB を使ってお勉強。フロント側に投稿 (Post) の投稿ステータス (post_status) の日本語を表示したい。

学んだこと、気をつけたことまとめ

  • 既存の属性を元に算出した、新しい値をアクセサを使用し返す
  • フロント側で投稿ステータスの値を判定して対応する日本語を表示、というようなことは絶対に行わない。ビューにロジックが入り込んでしまい読みづらく複雑になってしまうし、同じ内容を必要な回数分コピペしなければならなくなるため。
  • 投稿ステータスの日本語名は、定数ファイル (例えば config/const.php) に入れるのではなく、投稿モデル (app/Models/Wp/PostType/Post.php) に持たせた。投稿ステータスを調べたい、加工修正したい時に最も知っているべきで存在しても違和感のないしっくりくる場所が投稿モデルなため。

やりたいこと

  • フロント側に投稿 (Post) の投稿ステータス (post_status) の日本語を表示したい。