【问题标题】:Laravel Model Relationships. Pure DB relatedLaravel 模型关系。纯DB相关
【发布时间】:2014-12-18 02:12:08
【问题描述】:

我正在阅读有关定义关系的 Laravel 文档,这对我来说有点不清楚。 (可能是因为语言障碍..)

我得到了以下信息:

我希望人们选择一个目标。如果用户选择一个目标,相关的包就会出现。在这些包中有一个信息按钮,包含有关包的更多信息。 如果用户点击信息链接,将显示相关的包裹信息。

仅供参考!将有9个目标。每个目标有3个包,每个包有1个包信息。

Objective Model
// contains
- id
- name
- icon

// relationship
HasMany package

////////////////////////////////////////////////////
Package Model
// contains
- id
- title
- information
- info_link
- buy_link

// relationship
belongsToMany Model
hasMany PackageInfo -- or has PackageInfo ?

///////////////////////////////////////////////////
PackageInfo Model
// contains
- id
- body

// relationship
belongsToMany Package -- or belongsTo Package ?


//////////////////////////////////////////////////
Objective_package Pivot
- id
- Objective_id
- Package_id

package_packageInfo pivot
- id
- Package_id
- packageinfo_id

我定义的关系是正确的,还是我真的像颠倒地阅读了整个文档?

【问题讨论】:

    标签: php laravel laravel-4 relationship


    【解决方案1】:

    打包关系的目标似乎是正确的,但如果只有 1 个 packageinfo,那么您不需要该关系的数据透视表

    //PackageInfo Model
    - id
    - package_id
    - body
    
    //relationship
    belongsTo Package
    $this->belongsTo('Package');
    

    我能给出的最快答案是 hasOne 将用于属于父对象的数据,但可能并不总是需要与它一起提取。就像用户有个人资料一样。 90%(如果不是更多)您不想要他们的简历或个人资料,但该个人资料是该用户独有的。

    hasMany 就像地址一样。一个用户可以有多个地址用于运输或计费,但其他用户不应有权访问该数据,因此该用户有多个地址

    belongsToMany,或多对多,在多个对象之间共享。一个用户可以有很多角色,一个角色可以有很多用户。一个博客的帖子可以有很多标签,一个标签会附加到很多帖子。

    多态;您可能永远不需要担心,但想法是图像可以属于许多不同的对象,但方式不同。就像在画廊的成员中,或者用户的缩略图或博客标题图像等。这破坏了以代码和可重用性为名的关系数据映射。建议谨慎行事,因为许多人对如何/何时使用它有不同的看法。

    希望这会有所帮助。如果有什么我想帮你的,或者我错过了你要找的东西,请告诉我。

    【讨论】:

    • 感谢您的回复和解释。不会只有 1 个 packageInfo。 foreach包,会有一个packageinfo。我将在一分钟内实现上述内容,如果遇到任何困难,我会分享!再次,谢谢老兄:) PS。您的解释应该在文档中.. 比文档 atm 中的内容更有意义...
    • 看来关系不正确。 (我只用目标和包尝试过)如果我使用多对多关系,我可以检索相关的包。有了上述关系,什么都没有出现。知道@dasper怎么可能吗?
    • 刚起床开始工作。让我花几分钟时间在本地复制它,看看我能找到什么。
    • 抱歉,我开了早上的站立会议,现在我回来了。这是我在本地创建的快速测试的链接。 gist.github.com/dasper/cc1162750d5c0cc6bb7a 需要注意的一些事项:除非另有说明,否则表名默认为复数。 Eloquent 区分大小写,因此最好将所有内容保持小写。 Eloquent 返回一个集合,所以不要使用 print_r 或 var_dump,而是在返回的数据上使用 ->toArray()
    猜你喜欢
    • 2020-04-02
    • 2019-04-04
    • 1970-01-01
    • 2023-02-20
    • 2018-07-11
    • 2016-11-01
    • 2017-10-25
    相关资源
    最近更新 更多