Laravel-使用Eloquent

时间:2019-01-21 15:02:55

标签: laravel laravel-5 eloquent

我正在尝试从使用Eloquent加入的表中选择特定的列。

我有3个型号 -交易 -频道 -商人

交易链接到渠道。它具有hasOne关系。 频道链接到商家。它还具有hasOne关系。

public function channel() {
    return $this->hasOne(Channel::class, 'uuid', 'entityId');
}

public function merchant() {
    return $this->hasOne('App\Merchant', 'uuid', 'sender');
}

我正在使用紧急加载,因此事务模型中具有以下内容:

protected $with = ['channel'];

频道具有:

protected $with = ['merchant']:

这是我要转换为Eloquent的查询,但是我不确定当列属于相关模型时如何选择列。我不明白的是,如果已经定义了关系,为什么不能在不重用联接或with子句的情况下从其他模型中选择列?

SELECT SUM(t.amount) AS amount, 
       m.name 
FROM transactionsV2 t JOIN
     channels c
     ON t.entityId = c.uuid JOIN
     merchants m
     ON c.sender = m.uuid
WHERE t.paymentType = 'DB' AND
      t.status = 1 AND
      t.processing_time >= '2019-01-01' AND
      t.processing_time < '2019-01-21'
GROUP BY m.name;

2 个答案:

答案 0 :(得分:0)

您可以执行类似protected $with = ['merchant:id,name'];的操作,也可以使用selectRaw('SUM(t.amount) AS amount, m.name)之类的raw expressions

答案 1 :(得分:0)

您可以尝试这样的事情:

d = Deal.last
d.destroy

Transaction::sum('amount') ->whereStuf(...) ->with(['channel.merchant' => function($query){ $query->select('name') ->groupBy('name'); }])->get(); 允许您获取嵌套关系。