簡體   English   中英

Laravel Eloquent 僅從關系中選擇列

[英]Laravel Eloquent select only columns from relationship

我有兩個模型InvoiceTotalMeterTariff ,其中 InvoiceTotal 模型是一對多的關系

public function meter_tariff() {
    return $this->belongsTo(MeterTariff::class);
}

我正在使用withdistinct函數根據 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 的具有唯一行的數組,但我從InvoiceTotalMeterTariff關系中獲取所有列。

我想將選定的列限制為MeterTariff關系中的idname

我試過下面的代碼。

選擇:

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM