【问题标题】:Eloquent Eager Load Double RelationshipEloquent Eager Load 双重关系
【发布时间】:2013-06-20 07:23:21
【问题描述】:

这个问题一直困扰着我,而 Google 也没有提供任何帮助。我有两个模型,一个舞蹈模型和一个作者模型。关系是一个作者可以有很多舞蹈。皱纹是这些对象之间实际上存在两种关系,因为有原作者和后来被认为重建舞蹈的作者(毕竟这些是历史舞蹈)。我可以使用 load() 函数为使用普通外键的关系预加载,但我不知道如何预加载使用不同名称外键的关系。

如何对第二个关系进行预加载?

【问题讨论】:

  • 您必须发布您的代码,以便任何人提供帮助

标签: laravel laravel-4 eloquent


【解决方案1】:

你可以这样做:

$dance = ModelName::query()
    ->with('eagerNameOne')
    ->with('eagerNameTwo')
    ->find($id);

其中添加了::query(),只是将所有渴望置于同一标识级别。

【讨论】:

    【解决方案2】:

    当使用不同的外键建立关系时,您必须在关系中指定要使用的键...return $this->hasOne('Author', 'foreign-key');

    因此,如果我理解您的问题,您想在同一个作者表中建立与两位作者的关系......

    那么也许是这样的? (将foreign_key 替换为您的表格字段)

    public function orig_author(){
     return $this->hasOne('Author');
    }
    
    public function second_author(){
     return $this->hasOne('Author', 'foreign-key');
    }
    
    public function dance(){
    return $this->hasMany('Dance');
    }
    

    然后像这样检索它...($id being the id of your dance)

    $dance = Dance::with('orig_author','second_author')->find($id);
    

    但老实说,我从来没有尝试过与一张桌子建立双重关系......如果它适合你,请告诉我。 :) 我很感兴趣。

    【讨论】:

    • 只是想让你知道我正在测试它,但我不想接受答案,至少在没有确认或一些关于真正解决方案如何最终略有不同的注释的情况下,直到我已经确认 一个有效的语法。不过,到目前为止,它看起来不错。
    • 终于到了可以明确测试的地步。是的,这对我有用。我误解了with() 的文档是你为它提供了模型名称,实际上你给它提供了返回关系的函数名称。注意:您的示例应更新为“public function orig_author”而不是“public class orig_author”。 ;)
    • 很高兴它为你工作:)....但是我不敢相信我错过了那个类/功能的东西......哈哈
    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2021-11-14
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多