当前位置: 首页 > 知识库问答 >
问题:

在拉雷维尔5号有很多对战。十、

龙俊英
2023-03-14

我很好奇为什么的Eloquent关系有一个不同于的签名。特别是自定义连接表名称-对于一个系统,其中给定的Comment属于许多Roles,并且给定的Role将有许多Comments,我想将关系存储在表称为my_custom_join_table,并将键设置为comment_keyrole_key

return $this->belongsToMany('App\Role', 'my_custom_join_table', 'comment_key', 'role_key'); // works

但反过来说,我不能定义自定义表(至少文档没有提到它):

return $this->hasMany('App\Comment', 'comment_key', 'role_key');

如果我有一个Role对象,它有很多注释,但是我使用一个非标准的表名来存储这种关系,为什么我可以使用这个非标准的表,但不能使用另一个?


共有2个答案

夏侯俊美
2023-03-14

试着用文字和图形来理解。

>

  • 一对一(hasOne)关系:

    • 一个用户有(可以有)一个配置文件。因此,一个配置文件属于一个用户。

    一对多(hasMany):

    • 一个用户有很多(可以有很多)条。所以,许多文章属于一个用户。

    许多对许多(属于许多):

    • 一个用户可以属于许多论坛。所以,一个论坛属于许多用户。

  • 邓昊天
    2023-03-14
    匿名用户

    在一对多关系中使用了has很多,而在一对多关系中使用的属性为多是指多对多关系。它们都是不同的关系类型,每个都需要不同的数据库结构——因此它们采用不同的参数。

    关键的区别在于,在一对多关系中,您只需要对应于相关模型的两个数据库表。这是因为对关系的引用存储在拥有的模型的表本身上。例如,您可能有一个国家模型和一个城市模型。一个国家有许多城市。然而,每个城市只存在于一个国家。因此,您将把该国家存储在城市模型本身(作为country_id或类似的东西)。

    但是,多对多关系需要第三个数据库表,称为透视表。pivot表存储对这两个模型的引用,您可以在关系声明中将其声明为第二个参数。例如,假设你有你的城市模型,还有一辆汽车模型。你需要一种关系来显示每个城市中人们驾驶的汽车类型。嗯,在一个城市里,人们会驾驶许多不同类型的汽车。然而,如果你看一种汽车类型,你也会知道它可以在许多不同的城市驾驶。因此,不可能在任一车型上存储城市id汽车id,因为每个车型都有多个。因此,将这些引用放在透视表中。

    根据经验,如果您使用一个属性为多关系,它只能与另一个属性为多关系配对,这意味着您有第三个数据透视表。如果使用has很多关系,则只能将其与属性To关系配对,并且不需要额外的数据库表。

    在您的示例中,只需将反向关系设置为belongTomany,然后再次添加自定义表以及外键和本地键(与其他模型的顺序相反)。

     类似资料:
    • 要从一开始就阻止您,没有权限问题/存储是递归的,整个项目文件夹由apache:apache存储 我甚至将日志文件重命名为-old和apache创建了一个新的。。。如果它没有实际的写权限,就不允许它创建它。 在CentOS 6.6版(最终版)下运行 从git部署了这个项目,这个家园为我的同事工作。 完全错误: [2015年5月18日星期一10:17:58][error][client 86.124.

    • 我在本地运行的Laravel应用程序中有一个登录页面,但在生产服务器上,我收到以下错误消息(Laravel.log) 在应用/存储/视图/8d74d14da5e7fbd7b4984adefddd5a1b中生成的代码是: 有什么想法吗? 谢谢你

    • 我在中编写查询时遇到问题。 我的疑问是 现在我想把这个查询转换成laravel eloquent。

    • 我正试图用雄辩加载一个遥远的关系,但遇到了问题。涉及5个表,它们是用户、corporate_users、公司和两个哨兵表(组和users_groups)。 表的设置如下所示: 用户有一个合作用户(一对一) 公司用户归属到公司(多对一) 用户通过users_groups透视表与组建立多对多关系。 所有这些关系都是单独工作的。最初,我可以通过调用

    • 所以我正在尝试为我的网站实现一个支付解决方案,经过相当多的研究,我仍然缺乏一个完整的解决方案。我正在运行Laravel 5.0,需要一般购物车付款功能。我想我会发布这篇文章,试图创建一个参考,以帮助其他可能有这个问题的人。我已经把测试事务放到了Paypal的沙箱中,这似乎是砖墙的所在,但是一个完整的概述会很有帮助。我将列出我需要克服的问题,以便解决一些问题。 完成支付解决方案实施需要解决的问题 >

    • 我的应用程序不想进入我的游戏控制器。php函数。它确实在group函数中,我用vardump对其进行了测试。它会一直走下去,直到它撞上“游戏”路线,然后它就不想走这条路线。 routes.php: GameController.php: AuthenticationController。php: 目标是当我的用户登录时转到游戏页面,这是因为Laravel会话cookie已经制作完成(我检查过),我