我正在使用 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)
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |