【Laravel】文字列のプライマリーキーに必要なコード

2021/07/04に公開

文字列のプライマリーキーを使おうとしてエラーの発生から解決までの道のりを紹介します。
ここではプライマリーキーをstring_idと仮定しています。

エラーが発生

一覧表示から詳細を表示するコードを書いて詳細表示しようとしたら以下のエラーが発生。

SQLSTATE[HY000]: General error: 1 no such column: id

エラーメッセージを見たらidがありませんとおっしゃっていらっしゃいます。
調べたらプライマリーキーがid以外の場合は明示的に指定すること必要でした。
以下のコードをModelファイルに追加しました。

protected $primaryKey='string_id';

新たなエラーが発生

そうしたら次は文字列で設定しているプライマリーキーが一覧表示で0と表示される現象に遭遇。
詳細表示しようとしたら以下のエラーが発生。

Trying to get property 'string_id' of non-object

これはstring_idがないってことだと思い・・・、ってさっき設定したじゃん!!
小一時間ほど調べましてやっと解決策を見つけました。
プライマリーキーが文字列の場合は以下の設定を追加することがわかりました。

protected $keyType='string';

まとめ

文字列のプライマリーキーでは以下の2つのコードが必要だとわかりました。

protected $primaryKey='string_id';
protected $keyType='string';
GitHubで編集を提案

Discussion