Laravel Left Join 覆盖 id 列

Rya*_*ton 5 php laravel

我正在使用 Laravel 8.x,并尝试从我的数据库中获取一些数据。然后我加入另一个表,这很好,除了我的reports表的 ID 列被我的report_data列(那里的 ID 列)覆盖。

我尝试使用,它似乎保留了我的 ID 列,但是我的左连接中->select('report.*')没有包含表中的列?report_data

我究竟做错了什么?

/**
 * View a report
 *
 * @return Response
 */
public function view($id)
{

    $report = DB::table('reports')
                ->where('id', $id)
                ->where('user_id', Auth::id())
                ->first();

    if (!empty($report->report_data_id)) {
      $report = DB::table('reports')
                  ->where('reports.id', $id)
                  ->where('reports.user_id', Auth::id())
                  ->leftJoin('report_data', 'report_data.id', '=', 'reports.report_data_id')
                  ->first();

      $report->discovery_filters = json_decode($report->discovery_filters);
      $report->report_data = json_decode($report->report_data);
    }

    return response()->json([
      'success' => true,
      'message' => 'Your report',
      'report' => $report
    ], 200);

}
Run Code Online (Sandbox Code Playgroud)

我需要保留表id中的列reports

小智 1

问题是您选择了两id列,这会覆盖 id 中的一列。您可以指定 Eloquent 从“report_data”表中选择“id”列作为“rd_id”并对其进行联接:

$report = DB::table('reports')
    ->select('reports.*', 'report_data.id AS rd_id')
    ->where('reports.id', $id)
    ->where('reports.user_id', Auth::id())
    ->leftJoin('report_data', 'report_data.id', '=','reports.report_data_id')
    ->first();
Run Code Online (Sandbox Code Playgroud)

然后你可以使用report_data idas:

$report->rd_id;
Run Code Online (Sandbox Code Playgroud)

以及report id作为:

$report->id;
Run Code Online (Sandbox Code Playgroud)