7

テーブルがあります Books: ID (int) と ISBN (string) を持つ ISBN は一意のキーです。本の isbn を保存する別のテーブルがあります。私が持っている本のモデルでは: $this->hasMany('Other', 'isbn', 'isbn');

しかし、それはisbnを無視します。これを行う方法を知っていますか?

一時的な修正:

$this->primaryKey = 'isbn';
return $this->hasMany('Other', 'isbn');
4

4 に答える 4

3

少なくとも 4.2 以降では、ローカル キーを で指定できるようになりましたhasMany

ドキュメントから(4.25.2、 5.4 、 5.7 ):

return $this->hasMany('Comment', 'foreign_key', 'local_key');
于 2016-02-10T15:16:42.507 に答える
1

私がこれを正しく読んでいれば、getKeyName をオーバーライドすることでこれを達成できるかもしれません。

    public function getKeyName(){
        return $yourKeyName;
    }
于 2013-09-19T22:10:43.620 に答える
1

これは不可能です。pk ではないテーブルの一意の列にリンクしたい場合はごくわずかです。とはいえ、他のフレームワークでは主キーを変更する方法が開発されており、Laravel に対して正式にそれを要求した人はまだいません。GitHub で提案を作成すると、将来のリリースに反映される可能性があります。


あなたの特定の例を少し見てください - これは、熱心な読み込み状況で関係を使用するようになると、予期しない結果をもたらす可能性があり、関係の片側のみを説明します. 他のに属しを追加すると、逆の問題が発生します。

isbn を介して関係をセットアップできる場合があります。ただし、これは Book hasOne ISBN、ISBN belongsTo Book、ISBN hasMany Others、Other belongsTo ISBN の形式を取ります。$book->isbn->othersプロパティへのアクセスはorのようになります$other->isbn->book

私の最後の提案は、Book を拡張し、新しいクラスの主キーを として設定し、isbnすべての関係をそのモデルに基づいて構築することです。理想的ではありませんが、他のソリューションよりも痛みが少ないでしょう。

于 2013-05-15T08:18:36.010 に答える