[英]Laravel Eloquent select only columns from relationship
我有兩個模型InvoiceTotal
和MeterTariff
,其中 InvoiceTotal 模型是一對多的關系
public function meter_tariff() {
return $this->belongsTo(MeterTariff::class);
}
我正在使用with
和distinct
函數根據 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
關系中獲取所有列。
我想將選定的列限制為MeterTariff
關系中的id
和name
。
我試過下面的代碼。
選擇:
$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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.