我正在尝试从使用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;
答案 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();
允许您获取嵌套关系。