Laravel の Model::find と PHPStan

Laravel の Model::find は引数の型によって戻り値が異なります。

  • 引数がintなら、単一のモデルのインスタンス
  • 引数が配列なら、配列

ここで PHPStan で静的チェックをした時に、引数の型があいまいだとエラーになることがあります。

$user = User::find($value);
$result = $user->name; // ここでエラーになる

$value の型が明確ではない場合、$user は単一のインスタンスか配列のどちらかになります。

そのため、$user->name は、配列だった場合にエラーになるため、PHPStan はエラーとして検知します。