この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:atom
更新日時:2026-05-11 16:41:44

タイトル: Illegal offset type
SEOタイトル: 【Laravelエラー】Illegal offset type

エラー内容

ErrorException (E_WARNING)

Illegal offset type

このエラーの意味

配列やコレクションのキーに、文字列や整数ではない値を使おうとしたときに発生するエラーです。
PHP では、配列のキーに使えるのは基本的に文字列か整数です。

よくある発生例

たとえば、オブジェクトや配列そのものをキーとして渡していると発生します。

$key = ['id' => 1];

$value = $array[$key];

この例では $key が配列なので、配列のキーとして使えません。

Laravel で起きやすい場面

  • Eloquent モデルを配列キーのように扱っている
  • find() や配列アクセスに、スカラー値ではなく配列やオブジェクトを渡している
  • 複合主キーを無理に Eloquent で扱っている

複合主キーとの関係

Laravel / Eloquent は複合主キーの扱いが得意ではありません。
そのため、複合主キー前提のモデルに対して通常のキー取得の書き方をすると、このエラーや周辺の不整合が出ることがあります。

たとえば次のように、配列形式でキーを渡す実装はそのままでは扱いにくいです。

$id = ['key1' => 'A', 'key2' => 'B'];

$row = SampleModel::find($id);

対処法1: キーに使う値を見直す

まずは配列アクセスや検索条件に渡している値が、本当に文字列か整数かを確認します。
dd()var_dump() で値の型を見ると切り分けしやすいです。

対処法2: 複合主キーを前提にしない形へ寄せる

可能であれば、Eloquent モデルには単一主キーを持たせ、複合条件は通常の where() で書く方が安定します。

$row = SampleModel::where('key1', $key1)

->where('key2', $key2)

->first();

対処法3: Collection のキー指定も確認する

コレクションの get() や配列アクセスでも、オブジェクトや配列をそのままキーにすると同じ問題になります。
キーに使う値だけ取り出してからアクセスしてください。

まとめ

Illegal offset type は、キーに使えない型を配列やコレクションに渡しているのが原因です。
Laravel では特に、複合主キーを Eloquent にそのまま背負わせている場合に起きやすいので、単一主キー + where() ベースに寄せると安定しやすくなります。