php - Laravel Eloquent 仅从关系中选择列
问题描述
我有两个模型InvoiceTotal
,并且MeterTariff
InvoiceTotal 模型内部是一对多关系
public function meter_tariff() {
return $this->belongsTo(MeterTariff::class);
}
with
我正在使用anddistinct
函数根据 invoice_id 查询所有唯一的meter_tariff 行。
$validatedData = $request->validate([
'invoice_ids' => ['required', 'array'],
'invoice_ids*' => ['exists:invoices, id']
]);
$meter_tariffs = InvoiceTotal::with('meter_tariff')
->whereIn('invoice_id', $validatedData['invoice_ids'])
->distinct('meter_tariff_id')
->get();
这工作正常。结果是一个基于meter_tariff_id 的具有唯一行的数组,但我从中获取了所有列InvoiceTotal
和MeterTariff
关系。
我想限制选定的列id
与关系之间name
的MeterTariff
关系。
我试过下面的代码。
选择:
$meter_tariffs = InvoiceTotal::with('meter_tariff')
->whereIn('invoice_id', $validatedData['invoice_ids'])
->distinct('meter_tariff_id')
->select('meter_tariff:id,name')
->get();
在with里面查询:
$meter_tariffs = InvoiceTotal::with(['meter_tariff' => function($query) {
$query->select('id', 'name');
}])
->whereIn('invoice_id', $validatedData['invoice_ids'])
->distinct('meter_tariff_id')
->get();
中的选择:
$meter_tariffs = InvoiceTotal::with('meter_tariff:id, name')
->whereIn('invoice_id', $validatedData['invoice_ids'])
->distinct('meter_tariff_id')
->get();
解决方案
您可以使用 pluck 仅从 MeterTariff 关系中获取选定的列 - id 和 name。
$meter_tariffs = InvoiceTotal::with('meter_tariff')->whereIn('invoice_id', $validatedData['invoice_ids'])->distinct('meter_tariff_id')->get()->pluck('meter_tariff.id', 'meter_tariff.name')
推荐阅读
- java - 如何编译 java 程序,同时保持 windows-1252 编码文件名?
- c# - 谷歌语音到文本 api 与单一的话语
- python - Dask 计算非常慢
- php - 通过 phpmailer 发送图片到邮件
- symfony - Symfony 表单多对多选择选项不起作用
- asp.net-mvc - 如何在@URL 中放置多个 Id 参数。动作和控制器获取 ID
- json - React Native:如何从导入的 JSON 文件中获取数组的长度?
- php - 为什么 Laravel 分页总是显示相同的页面?
- java - java spring mvc json数据绑定自定义json响应
- php - 刷新页面后上传新图片后保存更改