错别字
falling-ts
5年前
修改理由:
相关信息:
- 类型:文档文章
- 文章: 模型关联
- 文档: 《Laravel 5.7 中文文档(5.7)》
此投稿已在 5年前 合并。
内容修改:
Old | New | Differences |
---|---|---|
215 | 215 | <a name="many-to-many"></a> |
216 | 216 | ### 多对多 |
217 | 217 | |
218 | 多对多关联比 `hasOne` 和 `hasMany` 关联稍微复杂些。举个例子,一个用户可以拥有很多种角色,同时这些角色也被其他用户共享。例如,许多用户可能都有 「管理员」 这个角色。要定义这种关联,需要三个 | |
218 | 多对多关联比 `hasOne` 和 `hasMany` 关联稍微复杂些。举个例子,一个用户可以拥有很多种角色,同时这些角色也被其他用户共享。例如,许多用户可能都有 「管理员」 这个角色。要定义这种关联,需要三个数据库表: `users`,`roles` 和 `role_user`。 `role_user` 表的命名是由关联的两个模型按照字母顺序来的,并且包含了 `user_id` 和 `role_id` 字段。 | |
219 | 219 | |
220 | 220 | 多对多关联通过调用 `belongsToMany` 这个内部方法返回的结果来定义,例如,我们在 `User` 模型中定义 `roles` 方法: |
221 | 221 | … | … |
236 | 236 | } |
237 | 237 | } |
238 | 238 | |
239 | 一旦 | |
239 | 一旦关联关系被定义后,你可以通过 `roles` 动态属性获取用户角色: | |
240 | 240 | |
241 | 241 | $user = App\User::find(1); |
242 | 242 | … | … |
248 | 248 | |
249 | 249 | $roles = App\User::find(1)->roles()->orderBy('name')->get(); |
250 | 250 | |
251 | 正如前面所提到的,为了确定关联连接表的表名,Eloquent 会按照字母顺序连接两个关联模型的名字。当然,你也可以不使用这种约定,传 | |
251 | 正如前面所提到的,为了确定关联连接表的表名,Eloquent 会按照字母顺序连接两个关联模型的名字。当然,你也可以不使用这种约定,传递第二个参数到 `belongsToMany` 方法即可: | |
252 | 252 | |
253 | 253 | return $this->belongsToMany('App\Role', 'role_user'); |
254 | 254 | … | … |
301 | 301 | |
302 | 302 | #### 自定义 `pivot` 属性名称 |
303 | 303 | |
304 | 如前所 | |
304 | 如前所述,来自中间表的属性可以使用 `pivot` 属性访问。但是,你可以自由定制此属性的名称,以便更好的反应其在应用中的用途。 | |
305 | 305 | |
306 | 306 | 例如,如果你的应用中包含可能订阅的用户,则用户与博客之间可能存在多对多的关系。如果是这种情况,你可能希望将中间表访问器命名为 `subscription` 取代 `pivot`。这可以在定义关系时使用 `as` 方法完成: |
307 | 307 |