当前位置: 首页 > 知识库问答 >
问题:

Laravel 4查询生成器:左加入...查询

吴德辉
2023-03-14

我试图从一个表中选择所有结果,并在用户ID匹配时与另一个表合并。

我有三个表:runs、users和一个run\u用户透视表。我想从数据透视表中的“运行”和其他列(即“已完成”、“粘性”、“上次测试”和“难度”)中选择所有结果,但只从当前用户的“运行用户”中提取数据。

在原始SQL中,我通过一个带有AND语句的左连接成功地做到了这一点:

SELECT
runs.startpoint,
runs.startpostcode,
runs.endpoint,
runs.endpostcode,
run_user.completed,
run_user.sticky,
run_user.last_tested,
run_user.difficulty
FROM runs
LEFT JOIN run_user ON run_user.run_id=runs.id AND run_user.user_id = '2'

如何通过查询生成器执行此操作,有何建议?我可以在Laravel4中进行左连接,但不知道如何将其与AND语句结合起来。

感谢您的帮助。

谢谢!

共有3个答案

吴高洁
2023-03-14

用这个

DB::table('runs')->select('runs.startpoint','runs.startpostcode','runs.endpoint','runs.endpostcode','run_user.completed','run_user.sticky','run_user.last_tested','run_user.difficulty')
    ->leftJoin('run_user', function($join)
    {
        $join->on('run_user.run_id', '=', 'runs.id')
        ->where('run_user.user_id', '2');
    })
    ->get();
欧阳晗日
2023-03-14

如果有人想知道我是如何在一个leftJoin参数上使用DB::raw实现的:

DB::table('runs')
    ->leftjoin('run_user', 'runs.id','=', 
      DB::raw('run_user.run_id AND run_user.user_id = ' . $user->id))
    ->get();

它不像我希望的那样“雄辩”,但是如果没有一个有效的“andOn”条件,这似乎是你想要在左连接中添加AND的唯一方法

如果有人能建议一种更整洁的方式,我很想知道!

谢谢

闻深
2023-03-14

按照您的要求,以下是使用查询生成器进行查询的方式:

DB::table('runs')
        ->leftJoin('run_user', function($join)
        {
            $join->on('run_user.run_id', '=', 'runs.id')
            ->on('run_user.user_id', '=', '2');
        })
        ->get();

但是JOIN语句看起来有点奇怪,您可能想把它变成一个正常的WHERE(除非您有一个非常具体的原因直接在JOIN子句中过滤)。

DB::table('runs')->join('run_user', 'run_user.run_id', '=', 'runs.id')->where('run_user.user_id', '=', '2')->get();

文件:http://laravel.com/docs/queries#joins

 类似资料:
  • 我想不出如何使用TypeOrm查询生成器编写以下MySql语句 从farm.reg中选择reg.id,其中grpId=“abc”; 这个选择返回的只是ID的,但我的查询生成器返回的是整个对象。 现在,我在我的NestJs服务中有这个函数,但我需要使用'map',我不想… 谢谢

  • 我正在构建一个简单的元数据表,从查询中获取数据。我希望能够查询“type”变量的两个选项。然而| |不起作用;当我使用这个时,页面崩溃。

  • 目前我有以下查询: 产出: 它可以工作,但在加入前限制注释表。结果是,它选择前5个注释并映射它。id为5的所有评论将被忽略。 谢谢

  • 我有下面的查询,我正试图将其转换为Laravel的查询生成器,以便利用自动转义等功能。 实际上,查询所说的是“获取所有主题的名称,如果它们有匹配的report_comment(通过中间的表),将其与主题一起返回”(对于给定的条件,主题有一个或零report_comments)...如果我直接在MySQL中运行查询并返回我期望的结果,查询就可以工作。目前是硬编码的,但最终将成为占位符,以便可以传入任

  • 我正在使用Query builder插入数据所有字段都已插入,但像created_at和updated_at这样的时间戳没有插入,它们都具有默认的0:0:0值

  • 我有一个问题,使laravel查询: 我想举个例子: 我有这个但不起作用: