2017-07-09 22 views
1

5.4への更新後、私の関係は正しく動作しません。調べた後、Laravelは foreignkeyの名前を探しています:user_id,post_idなどの代わりに、user_user_idまたはpost_post_idの代わりにL 5.3が使用されていました。また、ピボットテーブルのプライマリキーをtag_tag_idなどに更新して、再び動作させる必要がありました。Laravel 5.3から5.4の関係foreignKeyの問題

この新しい条約に従って私のテーブルの外部キーの名前が更新されましたが、現在は動作しています。しかし、私はまだ、なぜ、どのように変化し、どこから来ているのかを知りたいです。

ありがとうございます!

答えて

1

getKeyNameを使用してモデルの主キーを上書きしていますか?

Laravelは引き続き外部キーとして同じ慣習user_idを使用します。

ただし、5.4では、関係を定義する際に外部キーを明示的に指定する必要はありません。ドキュメントから

ただ、以前Laravelのリリースのように、この関係は、一般的に外部キーとしてuser_idを使用します。あなたは

Upgrading To 5.4.0 From 5.3

更新が

問題はの値を設定することによっても引き起こされる可能性があるUserモデルのgetKeyNameメソッドをオーバーライドしている場合は、動作は以前のリリースと異なる可能性があり$ primaryKey。 あなたはコードを提出しませんでした。ただし、ユーザーモデルでは、$primaryKey = user_idを定義します。Laravelはこのキー名に列名を追加します。したがって、laravelはuser_user_idを照会しようとしています。

ユーザーモデルから$ keynameを削除するだけで、laravelはuser_idという慣例に従って外部キーを引き継ぎます。

それとも、外部キーが明示的にbelongsToの()に2つ目の引数を渡す定義することができます。 return $this->belongsTo(User::class, 'user_id);

+0

はありません、私は、ユーザーモデル自体に$主キーを設定します。そして、私のポストモデルで次のように関係をロードします:public function user() { return $ this-> belongsTo(User :: class); } – Jorn

+0

$ primaryKeyを設定することは、問題の原因となっているgetKeyNameメソッドをオーバーライドすることと同じです。 – Hamoud

+0

しかし、$ primaryKeyを設定しなければ、私の主キーが 'user_id'なので、ユーザテーブルの 'id'カラムを探しています。 QLSTATE [42S22]:列が見つからない:1054 'where句'の 'id'列が不明です(SQL:select * from 'users' from' id' = 26 limit 1)。つまり、すべての主キーを「id」に変更する必要があります。次に、primaryKeyをカスタム値に設定することは役に立たないでしょう – Jorn

関連する問題