首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SqlAlchemy 2.0 中文文档(十九)

关系加载分为三类:延迟加载、急切加载和无加载。延迟加载指的是从查询返回的对象,相关对象一开始并未加载。当在特定对象上首次访问给定集合或引用时,会发出额外的 SELECT 语句,以加载请求的集合。...,以便由 subqueryload() 发出的附加查询包含与父查询使用的相同排序。...### 向加载器选项添加条件 用于指示加载器选项的关系属性包括在创建的联接的 ON 子句或涉及的 WHERE 条件中添加附加过滤条件的能力,具体取决于加载器策略。...subqueryload()发出的附加查询包含与父查询使用的相同排序。...另请参阅 向加载器选项添加条件 - 现代 API 允许在任何关系加载器选项中直接添加 WHERE 条件 关系加载器 API 对象名称 描述 contains_eager(*keys, **kw) 表示应从查询中手动指定的列急切加载给定属性

27910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Laravel Eloquent 模型关联关系(下)

    ', function ($query) { $query->where('title', 'like', 'Laravel学院%'); })->get(); 底层执行的 SQL 查询语句如下...`commentable_id`') ->where('content', 'like', 'Laravel学院%') ->where('commentable_type...`commentable_id`') ->where('content', 'like', 'Laravel学院%') ->where('commentable_type...: 结语 好了,关于关联关系我们就介绍到这里,我们分了三篇的篇幅来介绍 Eloquent 模型的管理关系,回顾一下,主要包含以下内容: 七种关联关系的定义:一对一、一对多、多对多、远层一对多、一对一的多态关联...、一对多的多态关联、多对多的多态关联; 以上关联关系的查询,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询对查询结果进行过滤; 关联模型的更新、插入和删除操作。

    19.6K30

    Laravel代码简洁之道和性能优化

    经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...如果互相喜欢,则添加双向联系人关系,插入之前校验是否存在,存在则更新type等字段,不存在则插入双向数据 我们通过这个场景能非常好的体会laravel-upsert的强大,不仅减少了代码量,也减少了sql...您可以提供带有文字或原始表达式的列名和键值对(见下文)。...()], [ 'username' => 'bar' , 'created_at' => now (), 'updated_at' => now ()], ]); SQL Server 需要带有唯一标识记录的列的第二个参数...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库的时间是int类型,不是laravel默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段

    5.8K20

    SqlAlchemy 2.0 中文文档(三)

    user_account.name = :name_1 ORDER BY address.id 另请参阅 关系加载技术中的两个部分: 连接急切加载的禅意 - 详细描述了上述问题...这个概念在连接急切加载的禅意部分中有更详细的讨论。 提示 需要注意的是,很多对一的急切加载通常是不必要的,因为“N 加一”问题在常见情况下不太普遍。...另请参阅 连接急切加载 - 在关系加载技术中 显式连接 + 急切加载 如果我们在连接到user_account表时加载Address行,使用诸如Select.join()之类的方法来渲染 JOIN,我们还可以利用该...请参见 联接式预加载 - 在 关系加载技术 中 显式连接 + 急切加载 如果我们在连接到user_account表时加载Address行,使用诸如Select.join()之类的方法来渲染连接,我们还可以利用该连接以便在每个返回的...user_account.name = :name_1 ORDER BY address.id 另请参阅 关系加载技术 中的两个部分: + 急切加载的禅意 - 详细描述了上述问题

    41520

    java 判断 子集_java – 获取集合子集的策略

    我的问题是,使用hibernate加载这些数据的最佳方法是:  > road.getCarCountMap()仅返回过去3个月中车辆计数的集合(可能为空)  >我最终得到一些需要很长时间才能处理的疯狂笛卡尔产品... >关闭会话后,不会抛出LazyInitializationExceptions  我尝试过的一些事情是:  1.使carCountMap集合急切并在映射上指定where属性,例如:  的情况下加载完全相同的数据)在3分钟内完成.  3.将地图定义为延迟并首先使用条件加载道路,然后运行其他查询以填充集合  List roadList = session.createCriteria...,但检索到的汽车和卡车计数不会附加到roadList中的Road对象.所以当我尝试访问任何Road对象的计数时,我得到一个LazyInitializationException.  4.将地图定义为惰性...,使用criteria.list()加载所有道路,迭代过去3个月内的所有测量日期,以强制加载这些值.

    1.1K20

    3分钟短文:Laravel模型一对一一对多关系真的乱吗?

    引言 laravel模型不但提供了可供数据库操作的增删改查,还附加了很多功能,最关键的要数模型的关联关系。本文说一说简单的一对一,和一对多关系。用代码说话,让大家更直观地理解。...代码时间 例如一个通讯录条目,一条通讯录,有一个手机号码,这是个一对一的关系。...有同学会疑问, 这中间是靠什么办法关联获取的呢?都是数据库的条目,一定是走SQL查询了吧? 没错,laravel也的确是这样做的。...先查找contacts条目: select * from contacts where 1 limit 1; 然后获取的 owner_id 比如等于47,那么接着查找 phone_numbers 表:...写在最后 本文通过常用的用户,通讯录,订单,手机号等模型数据,演示了laravel模型的一对一一对多 关联的使用方法。 Happy coding :-)

    2.1K30

    Laravel学习记录--Model

    普通渴求是加载 渴求是加载多个关联关系 嵌套的渴求式加载 渴求式加载指定字段 带条件约束渴求式加载 懒惰式渴求式加载 当以属性方式访问Eloquent关联关系的时候,关联关系数据是[懒惰式加载]因为都是用到的时候才执行查询...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...渴求式加载多个关联关系 有时候你需要在单个操作中渴求式加载多个不同的关联关系,要实现这一功能,只需添加参数到with方法即可 ,以逗号分割 如,查询文章的作者即所在栏目 嵌套的渴求式加载 要使用嵌套的渴求式加载的关联关系...懒惰渴求式加载 有时候你需要在父模型已经被获取后渴求式加载一个关联关系。...`tagtable_type` = 'App\Tag' 关联查询 实际上前面提到的渴求式加载与懒惰式加载也归结于关联查询,这里将关联查询补充完整 当我们以动态属性的方式去访问关联关系时为懒惰式加载 如

    13.6K20

    SqlAlchemy 2.0 中文文档(七十四)

    该功能还得到了改进,以便对于在延迟加载后生效的具有附加加载器选项的对象仍然可以进行缓存。...#3954 ### 新的“selectin”急切加载,使用 IN 一次加载所有集合 添加了一个名为“selectin”加载的新急切加载器,这在许多方面类似于“子查询”加载,但是生成了一个更简单的 SQL...联接式急切加载和子查询急切加载都不兼容 Query.yield_per()。 selectin 急切加载的缺点是可能产生大量的 SQL 查询,具有大量的 IN 参数列表。...#3954 新的 “selectin” 急切加载,一次加载所有集合使用 IN 添加了一个名为 “selectin” 加载的新急切加载器,从许多方面来看,它类似于 “subquery” 加载,但是生成了一个更简单的可缓存的...联接式急切加载和子查询急切加载都不兼容 Query.yield_per()。 selectin 急切加载的缺点是潜在的大型 SQL 查询,具有大量的 IN 参数列表。

    40710

    SqlAlchemy 2.0 中文文档(十五)

    join_depth – 当非None时,表示“急切”加载器应该在自引用或循环关系上连接多少级深度的整数值。该数字计算相同 Mapper 在加载条件中沿着特定连接分支出现的次数。...当保持默认值None时,急切加载器在遇到已经在链中较高位置的相同目标映射器时将停止链接。此选项适用于连接和子查询急切加载器。 另请参见 配置自引用急切加载 - 入门文档和示例。...raise - 禁止惰性加载;如果属性的值尚未通过急切加载加载,则访问该属性将引发InvalidRequestError。当对象在加载后要从其附加的Session中分离时,可以使用此策略。...如果延迟加载可以从标识映射中提取相关值或确定它应该是 None,则加载该值。当对象将保持与附加的Session关联时,可以使用此策略,但应阻止附加的额外 SELECT 语句。...with_expression() 关系加载技巧 关系加载风格摘要 在映射时配置加载器策略 带有加载器选项的关系加载 向加载器选项添加条件 使用 Load.options

    26110

    Spring认证中国教育管理中心-Spring Data MongoDB教程十四

    @WildcardIndexed在索引创建期间省略对带有注释的类型的投影。 示例 192....当对象从 MongoDB 加载时,这些引用会被急切地解析,以便您返回一个映射对象,该对象看起来与嵌入在顶级文档中的存储相同。...也定义为延迟加载DBRef并用作构造函数参数的必需属性也使用延迟加载代理进行修饰,以确保尽可能减少对数据库和网络的压力。 延迟加载的DBRefs 可能很难调试。...#{#target} }) 进行数据检索并急切地解析链接的实体。...在引用其值之一时,请确保使用包括包装器对象的属性路径。除此之外,不需要特殊操作。 18.6.6.展开对象的索引 可以将@Indexed注释附加到解包类型的属性,就像对常规对象所做的那样。

    5.8K10

    牛哇,PHP这个开发框架真的好香!

    Laravel框架相当于Java的Spring,生态or文档 是很完善的。 之前写Java的mybatis各种sql的和字段的处理,试过php开发之后,确实很快啊。...: 第三方类库,通过composer加载的依赖 6.路由 routes文件中定义路由规则 web.php Route::get('/', function () { return...这个语法是并且 (and) 关系语法这个语法是或者 (or) 关系语法 采取model进行sql增删改查(常用) 9.4 查询 laravel中对数据库开发模型非常重要。...更高级的用法,更多内容建议看官方文档:https://learnku.com/docs/laravel/7.x/eloquent/7499 总结 laravel框架采取链式查询sql。...更多的sql链式编写查询官方文档,应该是很快可以上手的。 之后还有比laravel更高级的用法lumen框架,就类似Java的mybatis-plus与mybatis。

    26920

    SqlAlchemy 2.0 中文文档(八十)

    在关系、joinedload 上设置 innerjoin=True 现在可以指示连接急切加载的标量和集合使用 INNER JOIN 而不是 OUTER JOIN。...relation()名称,输入较少,将会持续存在可预见的未来,因此此更改应完全无痛。 子查询急切加载 添加了一种称为“子查询”加载的新型急切加载。...在关系、连接加载上的innerjoin=True 现在可以指示连接急切加载的标量和集合使用 INNER JOIN 而不是 OUTER JOIN。...在 0.6 版本中,该逻辑更加敏感,并且可以检测到所有急切加载是否表示一对多关系,在这种情况下,急切连接不会影响行数: SELECT * FROM addresses LEFT OUTER...在 0.6 版本中,该逻辑更加敏感,可以检测到所有急切加载器是否代表多对一关系,如果是这种情况,则急切连接不会影响行数: SELECT * FROM addresses LEFT OUTER

    20310

    3分钟短文:Laravel模型作用域,为你“节省”更多代码

    引言 原则上代码写一次,处处是引用,不需要大量的冗余代码,这是一种趋势,也是提高代码健壮性的努力方向。 laravel模型为我们提供了一层数据库操作层,将数据交互独立出来。...events WHERE `published` = 1; 如果条件 published = 1 在默认的情况下需要开启,我们可以使用laravel模型的 全局作用域 方式为所有查询追加上这个条件。...,都会附加上此约束语句。...而声明一个本地作用域,只要遵循laravel的语法规定即可,如下示例: public function scopePublished($query) { return $query->where('published...* FROM events WHERE zip = '43016' and max_attendees = '2'; 写在最后 本期我们又旧事重提,把laravel模型的作用域设计方法拿出来温习了一下

    1.4K22

    SqlAlchemy 2.0 中文文档(十二)

    ['subchild1', 'child2'] ```## 配置自引用的急切加载 在正常查询操作期间,通过从父表到子表的连接或外连接来发生关系的急切加载,以便可以从单个 SQL 语句或所有子集合的第二个语句中填充父对象及其直接子集合或引用...然而,要使用自引用关系进行急切加载,SQLAlchemy 需要告知应该连接和/或查询多少级深度;否则,急切加载将根本不会发生。...['subchild1', 'child2'] 配置自引用关系的急切加载 通过在正常查询操作期间从父表到子表使用连接或外连接来进行关系的急切加载,以便可以从单个 SQL 语句或所有直接子集合的第二个语句中填充父表及其直接子集合或引用...然而,要想使用自引用关系的急切加载,需要告诉 SQLAlchemy 应该加入和/或查询多少级深度;否则,急切加载将根本不会发生。...另请参阅 邻接列表关系 - 单表版本 自引用查询策略 - 关于使用自引用映射进行查询的提示 配置自引用急切加载 - 使用自引用映射进行急切加载的提示 ## 复合“次要”连接 注意 本节介绍了

    23510

    3分钟短文:Laravel查询构造器,告别手写SQL的艰苦岁月

    引言 鉴于上一章标题引起一些开发同学的巨大兴趣,本文我们接着此种行文方式继续我们的“Laravel宇宙”系列文章。...下面是laravel里用的最多的写法: $users = DB::table('users')->where('type', 'donor')->get(); 这些是不是顺多了,一气呵成,要的就是这个感觉...写一条不附加任何约束条件的查询: $users = DB::table('users')->get(); 还有复杂的多表联合查询,使用 INNER JOIN 方式: DB::table('users')...,[true]); 为了编程愉悦感,还是回归我们的laravel推荐的链式操作的方式来演示更多更复杂的功能。...写在最后 本文轻描淡写地讲解了laravel中的查询构造器,讲了一个比较复杂的OR查询,因为使用闭包组装WHERE约束条件,所以会有些难以理解, 不过对比打印生成的SQL语句后,大家应该会豁然开朗!

    1.2K10
    领券