首页 > 解决方案 > Laravel 8 内部连接两个表

问题描述

我正在尝试从我的 Laravel 数据库中的两个表中获取不同的列,我是 joins 新手,但是按照文档我认为我的语法是正确的,除了我收到以下错误:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created_at' in on clause is ambiguous (SQL: select `data_source_one`.`event_count`, `data_source_two`.`sessions` from `data_source_one` inner join `data_source_two` on `created_at` >= `2021-01-11 10:57:45`)

我有两张桌子:

每个表都有 Laravelcreated_at列,一个表有一个sessions列,另一个有event_count,并且我有查询前 14 天的数据。所以不知道为什么它无法获取数据?

我的PHP是:

public function getSources(Request $request)
{

    $data = DB::table('data_source_one')
          ->join('data_source_two', 'created_at', '>=', Carbon::now()->subDays(14))
          ->select('data_source_one.event_count', 'data_source_two.sessions')
          ->get();

    return response()->json($data, 200);

}

标签: phpmysqllaravel

解决方案


如错误消息中所示,“created_at”列不明确,因为它存在于两个表中。所以你必须指定你指的是哪个“created_at”。

也许是这样的:

$data = DB::table('data_source_one as DSO')
      ->join('data_source_two as DST', //here, join your two tables by a common column )
      ->select('DSO.event_count', 'DST.sessions')
      ->where('DST.created_at', '>=', Carbon::now()->subDays(14))
      ->get();

推荐阅读