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 中执行此操作? 的相关文章

  • 扩展 Eloquent 的类的构造函数

    我刚刚启动了一个新网站 我想使用 Eloquent 在为数据库播种的过程中 我注意到 如果我在扩展 eloquent 的模型上包含任何类型的构造函数 则会添加空行 例如 运行此播种器
  • Laravel 4 中的公共可用函数

    如果我想在 Laravel 中创建一个函数 该函数在我的应用程序中随处可用 我该怎么做 我的意思是 如果我创建一个名为 resizeimage 的函数 并且想从 Laravel 应用程序中的任何位置调用它 我该怎么做 创建一个名为 的文件夹
  • Laravel 扩展包类

    我在 Laravel 安装中添加了一个购物车包 但我需要向该类添加一个方法 如果我直接修改类 当我更新到新版本时 我的更改会被覆盖吗 如果是这样 在不破坏未来更新的情况下修改软件包的最佳方法是什么 谢谢您的帮助 JB 我不知道是否有任何从供
  • Laravel 带有约束的急切加载

    所以我的模型有两个简单的关系 然后急切加载就像这样完美地工作 Entry with author lastModifiedBy gt 但是假设我想添加一个带有约束的新关系 例如 public function foo return this
  • Laravel 4 如何检查一条路线是否仅来自/重定向自另一条路线?

    说我有localhost public admin立即重定向到localhost public user login 我怎样才能得到admin值在user login 您需要获取引荐来源网址并检查它是否包含 admin 尝试以下操作 ref
  • 如何在 Laravel 4 中注册命名空间

    问题 PostController php 中第 4 行未找到类 PostRepostioryInterface 或者在修改命名空间时我什至得到了类 找不到应用 模型 接口 PostRepositoryInterface 问题 如何在 la
  • 播种数据透视表的更好方法

    我有以下表格users roles和数据透视表角色 用户具有以下表结构 users id username password roles id role 角色 用户 id role id user id
  • 在远程服务器上运行 beanstalkd Worker

    我的堆栈设置包括以下内容 Machine1 主服务器 运行 laravel Machine2 Laravel 代码库的 MySql 服务器 Machine3 Beanstalkd工人 我已经设置了 SupervisordMachine1并添
  • 如何理顺 Laravel Blade @extends 的执行顺序?

    In 我尝试找到一种通过引用刀片 include来传递变量的方法 https stackoverflow com questions 25437939 how to pass variables by reference to includ
  • 迁移时未找到 Laravel 致命错误类

    我已经跑了artisan migrate reset 我删除了一些迁移文件 因为我不再需要这些表 I ran composer dump autoload其次是artisan dump autoload I ran artisan migr
  • 多种邮件配置

    我使用 mandrill 驱动程序配置了 laravel 的邮件服务 这里没有问题 现在 在我申请的某个时刻 我需要通过 gmail 发送邮件 我做了类似的事情 backup current mail configs backup Conf
  • Laravel 保存/更新多对多关系

    谁能帮助我如何保存多对多关系 我有任务 用户可以有很多任务 任务可以有很多用户 多对多 我想要实现的是更新表格管理员可以将多个用户分配给特定任务 这是通过 html 多选输入完成的 name taskParticipants 这里的问题是
  • Laravel 4 Blade @include 变量

    我试图做include使用 Laravel Blade 但问题是它无法传递变量 这是我的示例代码 file include blade php
  • 为什么 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
  • Laravel 使用数据库自​​动完成文本字段

    我正在尝试制作如下所示的自动完成表单 但该表单没有显示建议 因为我的数据库查询没问题 形成科尔 控制器方法代码 Routes 当我搜索链接时 我得到如下查询结果 显示结果 id 1 value 苏拉夫霍森 id 2 value 苏拉夫霍森
  • Laravel 4,如何在 Route::controller() 上应用过滤器

    我知道我能做到 Route get foo bar array before gt filter uses gt Controller bar 应用路由一些过滤器 我也知道 Route group 方法 无论如何 如果我想以这种方式定义一个
  • Laravel 自定义授权

    我在这里进行登录验证 LoginData Input except array token if Auth attempt LoginData return success 我的表不同 所以这里我更改表名称auth php table gt
  • Laravel - 检查 @yield 是否为空

    如果 yield 有内容 是否可以检查刀片视图 我正在尝试在视图中分配页面标题 section title hi world 所以我想检查主布局视图 类似 对于现在 2018 年以上 查看的人 您可以使用 hasSection name y
  • 作曲家 | laravel 5 - 更新依赖项但框架本身

    我正在为我的项目使用 Laravel 5 的预测试版 我发现 Laravel 5 的应用程序框架在 github 存储库中发生了更改 并且由于它是开发版本 因此预计会经常更改 我的问题是 我可以使用 Composer 只更新特定的依赖项而不
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单

随机推荐

  • 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