hasMany
のEloquentの関係がbelongsToMany
とは異なる署名をしているのはなぜか不思議です。具体的には、与えられたComment
が多くのRole
に属し、与えられたRole
がたくさんあるシステムのカスタム結合テーブル名はであり、その関係をmy_custom_join_table
というテーブルに格納し、そのキーをcomment_key
およびrole_key
。hasManyとlaravel 5.xのbelongsToManyとの比較
return $this->belongsToMany('App\Role', 'my_custom_join_table', 'comment_key', 'role_key'); // works
しかし逆に、私は(少なくともドキュメントはそれを言及していない)そのカスタムテーブルを定義することはできません。
return $this->hasMany('App\Comment', 'comment_key', 'role_key');
私はhasMany
Comments
そのRole
オブジェクトを持っている場合は、しかし、私はその関係を格納するために非標準のテーブル名を使用しますが、なぜこの非標準のテーブルを一方向に使うことができますか?
双方向多対多の関係の逆は多対多ではなく、一対多です。 Doctrineには、[すべての関係命令の素晴らしいプレゼンテーション]があります(http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional )とその実装。 – bishop
公式文書には、Eloquentリレーションシップに関する非常に良い記事があります。 – user3158900