【问题标题】:How to join value from related table to Laravel eloquent collection?如何将相关表中的值连接到 Laravel eloquent 集合?
【发布时间】:2016-07-16 06:29:22
【问题描述】:

我有一个表项目(sku,标题)和其他历史(sku,points,startdate)。 表 HISTORY 用作项目点更改的历史记录。

打电话时想加入最新积分

$items = \App\Items::all();

最好的方法是什么?

我知道我可以制作自定义属性,但似乎我有太多的查询(因为每个项目都会进行额外的查询?)

我也可以建立关系:

public function points()
    {
        return $this->hasOne('App\History','sku','sku')->orderBy('startdate','DESC');
    }

但是有更好的方法吗? br 是的

【问题讨论】:

    标签: php mysql laravel eloquent relationships


    【解决方案1】:

    由于您只需要最新记录,因此最好的选择是您显示的hasOne 关系。这样,可以预先加载关系,因此您只需调用 2 个查询,而不是 N+1 个查询。

    关系:

    public function currentPoints()
    {
        return $this->hasOne('App\History','sku','sku')->orderBy('startdate','DESC');
    }
    

    用法:

    $items = \App\Items::with('currentPoints')->get();
    

    【讨论】:

      【解决方案2】:

      例如:

       class Items extends Model
      {
          protected $primaryKey = 'sku';
      
          public function points()
          {
               return $this->hasOne('App\History','sku','sku')->orderBy('startdate','DESC');
          }
      
      
          public function getItems(){
               $items = \App\Items::with('points')->get();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-11-13
        • 2021-01-05
        • 1970-01-01
        • 2023-03-12
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2017-02-08
        相关资源
        最近更新 更多