orWhereHas - Eloquent 查询上的参数分组 - 如何在 Laravel 中执行此操作?

2023-11-23

在我正在构建的雄辩查询中,我对has使用 Laravel 4.1 的关系whereHas and orWhereHas方法。

在示例足球应用程序中,我希望对homeClub and awayClub关系,以便我可以在结果集中选择 homeClub = Arsenal 或awayClub = Arsenal。

这个问题是从先前的问题似乎在使用时orWhereHas方法 - 生成的 sql 不会对or约束。

查询(放置约束的相关摘录):

$ret
        ->where( function( $subquery ) use ( $ret ){
            $ret->whereHas('homeClub', function ( $query ){
                $query->where('name','Arsenal' );
            })->orWhereHas('awayClub',function ( $query ){
                $query->where('name','Arsenal' );
            });
        })
        ->where( function ( $subquery ) use ( $ret, $parameterValues ){
            $ret->whereHas('season', function ($query) use ( $parameterValues ){
                $query->where('name', $parameterValues['season_names'] );

            });
        } )
        ->whereHas('territory',function( $query ) use ( $parameterValues ){     
               $query->where('region','Australia');

        })->get()->toArray();

这会产生 sql:

SELECT * FROM `broadcasts` WHERE 

(SELECT count(*) FROM `uploads` WHERE `broadcasts`.`upload_id` = `uploads`.`id` and `type` = 'international-audience') >= '1' 
and 
(SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`home_club_id` and `name` = 'Arsenal') >= '1' 
or 
(SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`away_club_id` and `name` = 'Arsenal') >= '1' 
and 
(SELECT count(*) FROM `seasons` WHERE `broadcasts`.`season_id` = `seasons`.`id` and `name` = '2012/13') >= '1' 
and 
(SELECT count(*) FROM `territories` WHERE `broadcasts`.`territory_id` = `territories`.`id` and `region` = 'Australia') >= '1'

但是,这不是我想要的,因为参照雄辩的声明,俱乐部的疑问是grouped上面的查询要么选择 homeClub 约束,要么选择awayClub、赛季名称、领土区域。我想要的是以下 SQL:

SELECT * FROM `broadcasts` WHERE 

(SELECT count(*) FROM `uploads` WHERE `broadcasts`.`upload_id` = `uploads`.`id` and `type` = 'international-audience') >= '1' 
and 
((SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`home_club_id` and `name` = 'Arsenal') >= '1' 
or 
(SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`away_club_id` and `name` = 'Arsenal') >= '1' )
and 
(SELECT count(*) FROM `seasons` WHERE `broadcasts`.`season_id` = `seasons`.`id` and `name` = '2012/13') >= '1' 
and 
(SELECT count(*) FROM `territories` WHERE `broadcasts`.`territory_id` = `territories`.`id` and `region` = 'Australia') >= '1'

注意.. 俱乐部子查询上的括号。

有谁知道我如何将其写为雄辩的查询?我真的不想恢复到流畅/连接。


您需要引用传递到 where 闭包的查询。否则,您将绕过任何分组将分组的 where 子句添加到主查询中:

$ret
->where( function( $query ){
    $query->whereHas('homeClub', function ( $subquery ){
        $subquery->where('name','Arsenal' );
    })
    ->orWhereHas('awayClub',function ( $subquery ){
        $subquery->where('name','Arsenal' );
    });
})
->where( function ( $query ) use ( $parameterValues ){
    $query->whereHas('season', function ($subquery) use ( $parameterValues ){
        $subquery->where('name', $parameterValues['season_names'] );
    });
})
->whereHas('territory',function( $query ) use ( $parameterValues ){     
    $query->where('region','Australia');
})
->get();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

orWhereHas - Eloquent 查询上的参数分组 - 如何在 Laravel 中执行此操作? 的相关文章

  • 为什么我的调试数据未格式化?

    var dump and print r使用 Laravel 4 时显示的数据未格式化 如何格式化数据以使其更具可读性 通过在命令行上运行以下命令将 Kint 添加到您的composer json composer require rave
  • 雄辩的push()和save()区别

    我读过关于 eloquent 的 laravel 4 文档 并且对 Push 部分很感兴趣 它说 有时您可能不仅希望保存模型 还希望保存其所有关系 为此 您可以使用推送方法 保存模型和关系 user gt push 请参阅此处的链接 htt
  • Laravel 4 调用未定义的方法 Illuminate\Database\Eloquent\Collection::links()

    我尝试实现书中的代码 学习 Laravel 4 应用程序开发 http www packtpub com learning laravel 4 application development book 一个简单的使用 CRUD 应用程序如下
  • 如何在 laravel 4 中使用 php-FFMpeg?

    我是 Laravel 4 的新手 我已经安装了php ffmpeg在我本地的 Laravel 设置中 但我需要有关如何在 Laravel 4 中使用此 ffmpeg 的帮助 假设你已经拥有ffmpeg安装在本地主机服务器上 然后在 Lara
  • Laravel 4 级联软删除

    是否有一种模块化方法可以在 L4 中执行级联软删除 我的数据库已经设计为通过硬删除来执行此操作 因为所有表都与另一个表相关 但是 我正在使用软删除 并且真的不想让表超载delete 我的模型中的方法 只是由于 A 模型的数量 以及 B 必须
  • Laravel 4:刀片布局中的 if 语句工作很奇怪

    有人可以解释一下 如果我正常请求页面 不是ajax 为什么我会得到带有打印字符串 extends layouts default 的空白屏幕 if Request ajax extends layouts default section c
  • Laravel:BadMethodCallException 方法 [find] 不存在

    当尝试使用模型对象 User 从数据库中提取一些值时 出现以下错误 BadMethodCallException Method find does not exist 这是我的文件 模范用户
  • PHPstorm - 无法在blade.php 文件中设置断点

    我正在开发 Laravel 应用程序 可以很好地调试我的控制器 php 文件 但我还想调试blade php 文件 在我当前的设置中 我遵循了所有 jetbrains 为 Laravel 推荐的设置 https confluence jet
  • 如何理顺 Laravel Blade @extends 的执行顺序?

    In 我尝试找到一种通过引用刀片 include来传递变量的方法 https stackoverflow com questions 25437939 how to pass variables by reference to includ
  • Laravel中with()和compact()有什么区别

    功能有什么区别with and compact 在 Laravel 中这两个例子 示例1 return View make books index gt with booksList booksList 示例2 return View ma
  • 多种邮件配置

    我使用 mandrill 驱动程序配置了 laravel 的邮件服务 这里没有问题 现在 在我申请的某个时刻 我需要通过 gmail 发送邮件 我做了类似的事情 backup current mail configs backup Conf
  • Laravel 转义 Blade 模板中的所有 HTML

    我正在 Laravel 中构建一个小型 CMS 并尝试显示内容 存储在数据库中 它显示 HTML 标签而不是执行它们 就像所有打印数据都有一个自动 html entity decode 一样
  • 从关系中合并 Laravel 中的集合

    假设我有 3 张桌子 Images Subject Style 关系是多对多 图像 主题 和多对多 图像 样式 现在我想做一些类似的事情 result subjectResult gt images gt merge styleResult
  • Laravel/Homestead - OSX - Vagrant 连接超时

    Problem 我正在尝试让 Laravel Homestead 在我的 Mac Book Air 上运行 我已按照以下指示进行操作http laravel com docs 4 2 homestead http laravel com d
  • Laravel 中的高级 whereNotNull 语句

    在 Laravel 4 中可以执行以下操作吗 DB table myTable gt select DB raw columnNames gt whereNotNull function query use columns foreach
  • 为什么 Laravel 中的 .env 文件配置不起作用

    DB CONNECTION mysql DB HOST 127 0 0 1 DB PORT 3306 DB DATABASE DB USERNAME root DB PASSWORD 这是我的 laravel 5 4 配置 但 php ar
  • 通过 IP 地址限制 Laravel 错误日志

    When debug被设定为true在 Laravel 的app config php有什么方法可以限制结果Whoops包含对某些 IP 地址的堆栈跟踪的错误页面 并且不在该列表中的 IP 显示特定视图 Thanks 没有内置 但是你可能可
  • 一个模型中的多个表 - Laravel

    我的索引页使用数据库中的 3 个表 索引滑块 索引特征 页脚框 我使用一个控制器 IndexController php 并像这样调用三个模型 public function index return View make index gt
  • Laravel 4 无法创建目录,尽管我有正确的权限

    尽管我授予了正确的权限 但 Laravel4 无法创建目录 发生 FileException 错误 http s28 postimg org xkor8srxp 2014 01 03 2 53 18 png http s28 postimg
  • 使用 Laravel 在 Bootstrap 模式中动态加载表单

    我正在开发应用程序 它需要引导模式中的表单 并且还动态加载表单 我面临的问题是所有页面都再次以模式加载 这里有人为此提供任何例子吗 控制器 public function loadJsModalForm return View make f

随机推荐

  • Mongodb C# 驱动程序和 ISODate

    我通过了以下测试 namespace MongoDateTest TestFixture public class DateTesting public class TestEntity public string Id get set p
  • 我想用 javascript 将链接延迟 500 秒

    我一直在浏览 Stackoverflow 的问题 试图获得有关简单链接延迟的帮助 我想把它放在 div 周围 但我无法弄清楚我找到的示例 到目前为止 我知道我需要停止 href 的本机功能 但我不知道该怎么做 该代码对我来说仍然很陌生 帮助
  • 从另一个类调用表单类中的函数,C# .NET

    有人可以通过一些代码让我知道如何从另一个类调用位于 Form 类中的函数吗 一些代码会有很大帮助 thanks 编辑 这是我当前的代码 public partial class frmMain Form Class Instances Im
  • 关于默认的 C 结构体值,这段代码怎么样?

    我正在尝试创建具有默认值的结构 我不知道如何实现这一点 因为我看到的每个代码都是关于初始化的 我会以自然的方式进行 例如 struct stuff int stuff a 1 int stuff b 2 and so on 环顾四周 我发现
  • 如何从webapp2中的cookies/headers/session决定语言?

    我想利用 webapp2 的新本地化功能 该功能还具有特定于区域设置的时间和货币格式 Django 有一个很好的函数 名为 get language from request 我在完全迁移到 webapp2 之前就使用了该函数 现在我使用
  • 使用结构标识符来表示 POD 类型和 C 结构

    考虑下面的代码 struct Foo template
  • 在 nginx 中使用别名作为相对 url 时的禁止位置

    我正在尝试使用 Nginx 在相对 URL 上设置 roundcube phpldapadmin 例如 example com roundcube example com phpldapadmin 源位于以下文件夹中 var www rou
  • 如何使用 Javascript 在 Safari 中生成按键事件?

    如何以编程方式从 Safari 中运行的 Javascript 代码生成按键事件 看起来 WebKit 使用 DOM level 3 模型从 Javascript 创建键盘事件 而 DOM level 3 键盘事件模型不支持按键事件 我可以
  • 如果我只对一些样本进行转发,什么时候计算图会被释放?

    我有一个用例 我对批次中的每个样本进行转发 并且仅根据样本模型输出的某些条件累积某些样本的损失 这是一个说明性代码 for batch idx data target in enumerate train loader optimizer
  • python Pipes 的同步/异步行为

    在我的应用程序中 我使用多处理模块中的管道在 python 进程之间进行通信 最近 我观察到一种奇怪的行为 具体取决于我通过它们发送的数据大小 根据 python 文档 这些管道基于连接 并且应该以异步方式运行 但有时它们在发送时会卡住 如
  • python 矩阵转置和zip

    如何获得这个矩阵的转置 任何更简单的算法方法来做到这一点 第一个问题 Input a 1 2 3 4 5 6 7 8 9 Expected output a 1 4 7 2 5 8 3 6 9 第二个问题 Zip 给了我下面的输出 当我不知
  • SQLAlchemy 克隆具有关系的表行

    继这个问题之后SQLAlchemy 分离对象的修改 这使得对象的副本很好 但它丢失了原始对象具有的任何多对多关系 有没有办法复制对象以及任何多对多关系 Cheers 我通过遍历对象图并对图中的每个对象执行 expunge make tran
  • 使用 Delphi 进行 JNI 编程

    我可以用Delphi来编程吗Java 本机接口 来自阅读基本 JNI如果您确保使用 C 调用约定 这似乎是可能的 以前有人这样做过吗 我希望得到有关工具的提示 这些工具将有帮助 例如一个将Javah的C头文件转换为Delphi的工具 您可以
  • 文本缩进不适用于锚标记

    http jsfiddle net corinem TtPgy 我在用着 a href Lorem ipsum dolor a css a text indent 9999px 但这行不通 例如 当我使用另一个标签时 p 有用 我也尝试添加
  • ASP.NET Core 模型绑定错误消息本地化

    我正在使用 ASP NET Core 并尝试本地化该应用程序 我设法使用new用于本地化控制器和视图的 asp net core 资源 以及old用于本地化模型验证错误消息的资源 但是 当错误消息未链接到模型字段注释 如 必需 并且模型绑定
  • 从 inotify_event 检索完整路径名

    inotify event 结构如下所示 struct inotify event int wd Watch descriptor uint32 t mask Mask of events uint32 t cookie Unique co
  • 带有 src 和内容的 script-Tag 是什么意思?

    Google 1 按钮的示例 script 标签有一个 src Attributeand内容 这是什么意思以及它是如何工作的 不同的浏览器对此有不同的处理方式 有些仅在以下情况下运行内容 src包含在内 没有错误 有些人在尝试包含以下内容后
  • Python RuntimeWarning:长标量中遇到溢出

    我是编程新手 在我最新的 Python 2 7 项目中 我遇到了以下问题 RuntimeWarning long scalars 中遇到溢出 有人可以详细说明这意味着什么以及我可以做些什么来解决这个问题吗 代码运行完毕 但我不确定忽略警告是
  • UiBinder 小部件中的自定义属性

    我正在为我的应用程序使用 GWT 和 UiBinder 并且我正在尝试这样做
  • orWhereHas - Eloquent 查询上的参数分组 - 如何在 Laravel 中执行此操作?

    在我正在构建的雄辩查询中 我对has使用 Laravel 4 1 的关系whereHas and orWhereHas方法 在示例足球应用程序中 我希望对homeClub and awayClub关系 以便我可以在结果集中选择 homeCl