分组并依靠相关模型

时间:2019-03-25 20:29:23

标签: php laravel eloquent

我有一个名为item的表,该表与一个名为source的表具有belongsTo关系。我想按来源对所有项目进行分组,最后我想要一个以source->name作为键,并将相关项目数作为值的数组。

这是到目前为止我得到的:

Item::where('type', '=', Item::TYPE_POST)
  ->with('source')
  ->select('source_id', DB::raw('count(*) as total'))
  ->groupBy('source_id')
  ->pluck('total', 'source_id')
  ->all();
array:1 [
  89 => 149
]

这给了我想要的结构,但是项不是按source->name而是按source_id分组的,Itemexports.handler = function(context, event, callback) { // using SendGrid's v3 Node.js Library // https://github.com/sendgrid/sendgrid-nodejs const sgMail = require('@sendgrid/mail'); sgMail.setApiKey(context.SENDGRID_API_KEY); const msg = { to: 'me@example.com', from: 'noreply@example.com', templateId: 'my-id-goes-here', dynamic_template_data: { recipient_name: 'John Smith' } }; sgMail.send(msg).then(response => { let twiml = new Twilio.twiml.MessagingResponse(); callback(null, twiml); }) .catch(err => { callback(err); }); }; 表中的一个字段。有没有办法让数组中的键成为相关表中的一个字段?

1 个答案:

答案 0 :(得分:0)

我还没有尝试过,但是无论如何它应该可以让您关闭

使用收藏集

Item::where('type', '=', Item::TYPE_POST)
    ->with('source.name')
    ->get()
    ->mapWithKeys(function ($item) {
        return [$item->service->name => $item];
    })
    ->map(function ($items, $name) {
        return [
            $name => $items->count()
        ];
    });

使用查询

DB::table('items')
    ->selectRaw('sources.name as name, count(*.items) as count')
    ->join('sources', 'sources.id', 'items.source_id')
    ->where('type', '=', Item::TYPE_POST)
    ->groupBy('sources.id')
    ->get()
    ->pluck('count', 'name')