簡體   English   中英

如何從雄辯的關系中限制選定的列?

[英]How can I limit selected columns from an eloquent relationship?

我有一個3項的概念都存儲在一個數據庫中,並在它們之間定義了關系。 這些項目反映了調查的答案。 表格是:

結果:id,enrolment_id,assessment_id,completed(int),timestamps result_answers:id,result_id,answer_id,timestamps answers:id,answer_plain,answer_html,timestamps

我正在嘗試構建一個包含以下內容的對象:

Results (array){
  id, enrolment_id, assessment_id, created_at
  Result_answers (array){
    Answer{
      id,answer_plain
    }
  }
}

我使用以下代碼:

$result = Result::where('enrolment_id', '=', $id)
    ->where('completed', '=', 1)
    ->with(['result_answers' => function($query) {
        $query->with(['answer' => function($query) {
            $query->select('id', 'answer_plain');
        }]);
    }])
    ->select(['id', 'enrolment_id', 'created_at'])
    ->get();
return response()->json($result);

不幸的是,這給了我很多不需要的字段,有效地輸出了每個關系中每個表中的每個字段。 如何限制輸出的內容? 它似乎主要是result_answers的問題,因為我不需要來自該表輸出的任何數據,只需要answer的關系(這是有效的)。

我試過with()提供一個空的->select() with()但沒有運氣。

任何幫助贊賞。

結果答案之間存在多對多關系,您不應該關心中間的result_answers表。 您不應該在模型中將結果定義為results_answers表。

所有與加載數據相關的工作都應該由Eloquent完成,只要您正確定義了關系。

您的模型應包含以下關系:

class Result extends Model {
  public function answers() {
    return $this->belongsToMany(Answer::class, 'results_answers');
  }
}

有了這個定義,您應該能夠以更簡單的方式獲得結果的答案:

$results = Result::where('enrolment_id', '=', $id)
  ->where('completed', '=', 1)
  ->with(['answers' => function($query) {
        $query->select('id', 'answer_plain');
  }])
  ->select(['id', 'enrolment_id', 'created_at'])
 ->get();

現在,您應該能夠通過以下方式迭代結果和相關答案:

foreach ($results as $result) {
  foreach ($result->answers as $answer) {
    var_dump($answer);
  }
}

你也可以替換:

return response()->json($results);

返回$ results;

因為從控制器返回的所有jsonable內容在返回瀏覽器之前將自動序列化為JSON。

您可以將get()get()所有字段作為數組鍵函數傳遞給:

$results = Result::where('enrolment_id', '=', $id)
->where('completed', '=', 1)`
  ->with(['answers' => function($query) {
    $query->get(['id', 'answer_plain']);
  }])->get(['id', 'enrolment_id', 'created_at'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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