我有一个名为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
分组的,Item
是exports.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);
});
};
表中的一个字段。有没有办法让数组中的键成为相关表中的一个字段?
答案 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')