【问题标题】:Add a table alias retrieving relation using the with method Eloquent使用 with 方法 Eloquent 添加表别名检索关系
【发布时间】:2014-12-12 09:19:05
【问题描述】:

我想知道当您使用 Eloquent 的 with 方法检索关系时是否可以为表提供别名?

例如:

Post::where('title', 'like', '%' . $title . '%')
    ->where('published', 1)
    ->with(['medias AS jpeg' => function($q) {
          $q->where('format', 'jpeg'); 
 }])->with(['medias AS gif' => function($q) {
          $q->where('format', 'gif');
 }])->first();

我知道这行不通,但这是为了给你一个情况。

有可能还是我必须手动操作?

提前谢谢你。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    这是不可能的,因为with 不接受表,而是关系名称,并且它只存储给定关系的结果一次。

    因此,只需定义不同的关系:

    public function gifs()
    {
      return $this->hasMany('Media')->where('format', 'gif');
    }
    
    public function jpegs()
    {
      return $this->hasMany('Media')->where('format', 'jpeg');
    }
    

    hasMany 或任何明显的关系类型。

    【讨论】:

    • 感谢您的回答,这很简单。但是另一个问题,例如,我有三个表,分别称为 international_content_fr、international_content_en 和 international_content_cn,所以我有三个关系方法,所以当我 eagerLoad 时,我可以将参数传递给关系方法,以便每个关系方法只有一个国际表。
    • 不,您不能将任何参数传递给急切加载方法。检查这种情况下的多态关系。
    • 事实上,我可以通过测试值是否不是闭包来修改来自 laravel 的 Builder 类中的方法,如果不是,则将值作为参数传递,更容易,但你的解决方案是清洁工。
    • 是的,你可以随时调整泛型类,但这不是最好的方法,甚至不是很好;)
    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2019-08-24
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多