😒

Laravel 複合キーのテーブルへのinsertがうまくいかない(Illegal offset type)

2024/01/10に公開

概要

タイトル通り。
複合キーを持つテーブルへのinsertでなぜか Illegal offset type と表示されinsertがうまくいかない。

結論

Modelに

public $incrementing = false;

を追加する。

試行錯誤の経緯

主キーを定義

まず、Modelの中にほぼ何も書かれていなかったため、

protected $primaryKey = [
    'user_id',
    'department_id',
];

を追加 ※この会社は社員が複数部署に所属する場合があるとする!

結果 → 変わらない

insert時の記載方法を変更

変更前

$table = new App\Model\AffiliatedDepartment();
$table->user_id = $user_id;
$table->department_id = $department_id;
$table->save();

この時のエラーは2行目の$table->user_id = $user_id;で起こった。

変更後

$table = new App\Model\AffiliatedDepartment([
    'user_id' => $user_id,
    'department_id' => $department_id
]);
$table->save();

結果的にはこれでもダメだった。ちなみにエラーは1行目で起こった。

解決に至ったのは他の複合キーを持つModelを参照したとき。
上記の解決表記を追加したら、一瞬で通った。

Discussion