使用查询生成器或 Eloquent 进行带有附加条件的 JOIN

2024-03-29

我正在尝试使用 Laravel 查询生成器的 JOIN 查询添加条件。

<?php

$results = DB::select('
       SELECT DISTINCT 
          *
          FROM 
             rooms 
                LEFT JOIN bookings  
                   ON rooms.id = bookings.room_type_id
                  AND (  bookings.arrival between ? and ?
                      OR bookings.departure between ? and ? )
          WHERE
                bookings.room_type_id IS NULL
          LIMIT 20',
    array('2012-05-01', '2012-05-10', '2012-05-01', '2012-05-10')
);

我知道我可以使用原始表达式 https://laravel.com/docs/master/queries#raw-expressions但这样就会出现SQL注入点。我已经使用查询生成器尝试了以下操作,但生成的查询(显然,查询结果)不是我想要的:

$results = DB::table('rooms')
    ->distinct()
    ->leftJoin('bookings', function ($join) {
        $join->on('rooms.id', '=', 'bookings.room_type_id');
    })
    ->whereBetween('arrival', array('2012-05-01', '2012-05-10'))
    ->whereBetween('departure', array('2012-05-01', '2012-05-10'))
    ->where('bookings.room_type_id', '=', null)
    ->get();

这是 Laravel 生成的查询:

select distinct * from `room_type_info`
    left join `bookings` 
on `room_type_info`.`id` = `bookings`.`room_type_id` 
where `arrival` between ? and ? 
    and `departure` between ? and ? 
    and `bookings`.`room_type_id` is null

正如您所看到的,查询输出没有结构(特别是在 JOIN 范围内)。是否可以在 JOIN 下添加附加条件?

如何使用 Laravel 的查询生成器构建相同的查询(如果可能)使用 Eloquent 更好,还是应该保留 DB::select?


$results = DB::table('rooms')
                     ->distinct()
                     ->leftJoin('bookings', function($join)
                         {
                             $join->on('rooms.id', '=', 'bookings.room_type_id');
                             $join->on('arrival','>=',DB::raw("'2012-05-01'"));
                             $join->on('arrival','<=',DB::raw("'2012-05-10'"));
                             $join->on('departure','>=',DB::raw("'2012-05-01'"));
                             $join->on('departure','<=',DB::raw("'2012-05-10'"));
                         })
                     ->where('bookings.room_type_id', '=', NULL)
                     ->get();

不太确定是否可以将 Between 子句添加到 Laravel 中的连接中。

Notes:

  • DB::raw()指示 Laravel 不要放回引号。
  • 通过将闭包传递给连接方法,您可以向其中添加更多连接条件,on()将添加AND条件和orOn()将添加OR健康)状况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用查询生成器或 Eloquent 进行带有附加条件的 JOIN 的相关文章

  • Laravel 路由使用 nginx 覆盖 phpmyadmin 路径

    我的 LEMP Droplet 上有以下 nginx 配置 server listen 80 default server listen 80 default server ipv6only on root var www html pub
  • Laravel 5 重写异常处理程序

    我想知道是否可以重写 Laravel 5 中的应用程序异常处理程序类 而不将其扩展到另一个类 也许更好的说法是我想要它 这样就不会App Exceptions Handler将在异常时调用 但是我自己的处理程序之一 提前致谢 正如 Digi
  • Laravel 将数据传递给路由

    我是 Laravel 5 的新手 我需要一些帮助 因为我无法解决我的简单问题 我有一个数据列表http sample com partners http sample com partners如果我单击数据链接 我希望将其重定向到 http
  • Laravel 5 Blade 在出现错误时显示空白页而不是抛出异常

    在 laravel 4 中 当你尝试渲染一个不存在的视图时应用程序 视图或者带有未定义变量的视图 laravel 将抛出异常或显示有助于调试的错误 我全新安装了 laravel 5 0 13 并且在对刀片模板进行故障排除时遇到了困难 该模板
  • 如何更改 Laravel 中 404 未找到视图上的文本?

    我正在使用 Laravel 设置 API 当我输入不存在的路线时 我会被重定向到显示 404 的视图 未找到 我怎样才能改变这个观点abort response gt json Not Found 404 这样尝试通过另一个应用程序访问 A
  • Laravel,获取当前登录的用户

    我想在应用程序中显示当前登录用户的列表 我想使用 Laravel Auth 方法 我正在查看 API 但找不到类似的东西 我可能需要循环访问会话存储 然后将其与用户 ID 匹配 我对吗 更新 忘了提及 我将会话存储在数据库中 当前登录 是普
  • Tymon\JWTAuth::toUser 错误:需要令牌

    我有一个 Larvel API 它使用 Tymon JWTAuth 来验证用户身份 它运行良好 由于某些原因 我还有一条不受保护的路线web php Route get myroute MyController mymethod MyCon
  • 在 Homestead 中配置 php.ini

    我正在尝试更改变量最大输入变量在我的 php ini 文件中指定 How many GET POST COOKIE input variables may be accepted max input vars 2500 和跑步 sudo n
  • 根据laravel中选定的省份获取城市列表

    如何获取基于所选省份的城市列表 我的控制器 public function index province RajaOngkir Provinsi gt all city RajaOngkir kota gt all return view
  • /storage/logs 处不存在现有目录且不可构建:权限被拒绝

    我在 OVH Web 服务器上部署 Laravel 时遇到问题 制作完成后 composer update php artisan cache clear php artisan route clear php artisan dump a
  • Laravel 5.4 - 使用正则表达式进行验证[重复]

    这个问题在这里已经有答案了 以下是我的项目名称规则 this gt validate request projectName gt required regex a zA z d u 我正在尝试添加规则 使其必须以来信a z or A z可
  • 如何在 Laravel 5.4 中将 base64 转换为图像?

    我正在 Laravel 5 4 中开发 api 我将收到 Base64 格式的图像 如何在 Laravel 中将 base64 转换为图像 该解决方案将处理所有图像类型 image request gt input image image
  • 创建动态 Laravel 访问器

    我有一个Product模型以及Attribute模型 之间的关系Product and Attribute是多对多 在我的Product模型 我正在尝试创建一个动态访问器 我熟悉 Laravel 的访问器和修改器功能 如文档所示 here
  • Laravel updateOrCreate 带有自动增量数据库

    我的目的是如果值存在则更新 否则插入新行提交表单后在数据库表中 问题是 这里的函数添加新列在数据库表中而不是更新它们 这是我的功能 MyModel updateOrCreate array myField gt myValue gt whe
  • 删除多个对象 Amazon s3 PHP SDK

    我在一次删除多个对象时遇到问题 使用这个库 https github com aws aws sdk php laravel https github com aws aws sdk php laravel 我对使用该库的其他任何事情都没有
  • 如何在 laravel 中插入多类别和多列不同类别的帖子?

    大家好 我是一个新的 Laravel 我的项目有问题 我有2张桌子 posts id title category id category id name PHP Laravel Ruby 例如 我想要的结果是 如果我将帖子插入帖子数据库
  • Laravel Eloquent:计算总价的最佳方法

    我正在使用 Laravel 5 1 构建一个简单的买卖应用程序 每个Buy Model都有很多BuyDetail 里面存储了购买的商品数量和buy price 我已经在模型上实现了表之间的关系 class Buy extends Model
  • 带下拉列表的过滤器 Laravel

    我有一个下拉菜单 用于按类别过滤图像 我的第一个问题是我希望在过滤器之后选择选定的选项 我该怎么做 这是我第一次使用 Laravel 我想知道我的解决方案是否朝着正确的方向前进 现在我在两个函数中有相同的代码 我计划修复这个问题 但我真的无
  • Laravel:从新的自定义目录加载自定义类

    我目前已在我的应用程序目录中为所有 库 添加了一个新文件夹 我不断收到找不到该类的错误 这就是我所做的 我已将其添加到composer json 文件中的自动加载值中 autoload classmap app commands app c
  • 如何设置pdf的标题名称。查看文档时(新选项卡)[重复]

    这个问题在这里已经有答案了 我们如何更改pdf的标题名称 查看文档时 我没有使用任何 控制器是模态的 我只是在 href 标签中传递 url 但我想 更改标题名称 a target blank href class icon btn blu

随机推荐

  • 混合 C++ 和 Objective-C

    我使用 C 作为应用程序主干 使用 Objective C 作为 GUI 这很好 但是当谈到在 Objective C mm 文件 中将这些代码混合在一起时 我有几个问题 1 我可以将 STL 容器与 Objective C 或 Cocos
  • TabView 内的 SwiftUI iOS 16 NavigationPath 警告:NavigationAuthority

    我有一个TabView每个选项卡都有自己的NavigationPath我正在处理一个ObservableObject MainActor final class Router ObservableObject Published var h
  • 如何通过 ID 以外的其他方式获取 Backbone.js 模型?

    Backbone js 通过 ID 获取模型的默认 RESTful 方法非常简单且直接 但是 我似乎找不到任何通过不同属性获取模型的示例 如何通过不同的属性获取 Backbone js 模型 var Widget Backbone Mode
  • 单个文件中的多个类:此处不允许修饰符 private

    我无法理解为什么这段代码不能编译 class A public static void main String args System out println hi private class B int a 我将内容保存在名为的文件中A
  • Azure ARM 模板嵌套模板部署不会更新资源\无法启动

    我有以下 ARM 模板结构 Parent Template Nested Template 1 Nested Template 6 所以我只有 2 层模板 父级模板和嵌套模板 假设我将父级部署到一个空资源组 一切正常 之后 我删除其中一项资
  • iOS - 通过区域设置更改 UIDatePicker 的语言

    我正在用 Herbrew 语言创建应用程序 iPhone 的语言可以是任何语言 但我的应用程序只能在 Herbrew 中运行 在 iOS 的 UIDatePicker 中 我们有一个属性 locale 它将更改它显示的语言 但在 iOS5
  • Java Swing 保存和加载工作区/设置

    我有一个 Java Swing 应用程序 其中包含一堆框架 而这些框架又主要包含显示大量数据的表格 由于在启动时安排所有窗口和表格总是很麻烦且耗时 因此我想实现 工作区 功能 以便用户可以保存首选项设置并在启动时选择自动将存储的工作区加载到
  • 找到未合并的 Git 分支?

    我有一个包含许多分支的 Git 存储库 其中一些已经合并 一些还没有 由于分支数量相当多 如何判断哪些分支尚未合并 我想避免必须进行 章鱼 合并和重新合并已经合并的分支 尝试这个 git branch merged master 它按照锡上
  • 为什么我的标签栏按钮无法在 iPad 上自动调整大小?

    我正在构建一个通用的 iOS 应用程序 iPad 版本使用 SplitViewController 在弹出视图中 我有一个带有两个按钮的 UITabBarController 当它在 iPhone 上运行时 TabBar 按钮正确拉伸以填充
  • MVC 3 中如何处理会话超时

    我遇到了频繁的会话超时问题 我想编写一个可以在每个控制器上使用的通用过滤器 过滤器应该重定向用户登录 并在登录后返回到用户发送最后一个请求的位置 你可以尝试这样的事情 public class SessionExpireAttribute
  • 错误 (407)“需要代理身份验证。”

    我有一个要求 比如 我想从 winforms 访问一个 url 登录页面 即 Web 我必须将凭据传递给该网址 并且响应应该是经过身份验证的网页 标记 的内容 我已经编写了一个函数 它将请求 url 并返回响应 但我收到错误代码 407 需
  • git Reset 文件和 git checkout 文件有什么区别?

    为什么 git 允许我重置文件 我以为我明白了reset 从某种意义上说 它正在移动头部 显然我错了 So git reset sha file似乎做同样的事情git checkout sha file 除了我看到的file在索引和工作目录
  • Kestrel 错误:地址已在使用中(dotnet 核心)

    摘要 它的工作原理是dotnet run 但它不起作用dotnet myappname dll 我的 Linux 技能有限 但我正在尝试按照书本进行操作 这样我就不会混淆事情 以下本教程 http www hanselman com blo
  • 在 iOS 14 中,Interface Builder 中设置的 UITextField backgroundColor 在运行时为零

    我有一个应用程序可以在 iOS 11 13 上正常运行 但是当我在 iOS 14 中运行它时 有几个其中的文本字段用零渲染 因此透明 背景颜色即使背景颜色在 Interface Builder 中明确设置为白色 我在代码中看不到任何使用可能
  • 如何在 PySide2 应用程序中嵌入 matplotlib 画布

    我正在尝试将 matplotlib 画布嵌入到 PySide2 应用程序中 我尝试使用这个例子 https matplotlib org examples user interfaces embedding in qt5 html http
  • 使用 bash 计算文件中每个单词的出现次数

    我想计算文件中每个单词的出现次数 但结果是错误的 bin bash usage count sh file declare a dict for word in cat 1 do if dict word then dict word 0
  • 在 Google 表格中两个数字之间的列中填写数字

    所以我试图填写 Google 表格中两个单元格之间的数字 我从 270 开始 在列中出现几个不确定且变化的空单元格后 我需要达到 180 我需要均匀地填充它们之间的单元格 但如何呢 如果您想将这些值粘贴到同一列中 您需要执行以下操作 那么公
  • Prolog - 递归列表构建

    对于我正在编写的程序 我需要创建一个列表列表 其中包含代表乘积的数字对和两个给定数字的总和 现在我有一个函数 我可以指定将列表添加到列表中的次数 稍后将使用完整功能进行扩展 这是我所拥有的 s1 0 X s1 Q X N is Q 1 mu
  • NFC 广播接收器问题

    我希望我的应用程序仅在激活时侦听 nfc 标签 为此 我尝试如下注册一个 nfc 侦听器 但没有成功 IntentFilter filter new IntentFilter android nfc action TECH DISCOVER
  • 使用查询生成器或 Eloquent 进行带有附加条件的 JOIN

    我正在尝试使用 Laravel 查询生成器的 JOIN 查询添加条件