- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有 Region(城市列表)、Rental(租赁信息列表)和 Rental_Location(租赁地址列表 + 纬度/经度)的数据库表。
基本关系是:
Regions haveMany Rentals (with FK's region_id and rental_location_id in Rentals table)
Locations haveMany Rentals, or the reverse logic Rental belongsTo a Location
我想做的是从 region_id(来自 rentals 表)获取一个区域中所有出租的位置信息,以及包括位置空间数据(rental_locations 表):
$region = Region::find(1);
$rentals = $region->rentals; // doesn't contain location information yet
$rentalDataWithSpatialLocationData = $region->rentals->location; // what I liked to do
但最后一行使用 belongsTo 关系将无法通过将 rental_locations 中的空间数据添加到原始租赁集合中来实现。
现在 $rentals 集合包含一个区域的所有租金,但没有空间数据来标记 map 上的位置,但除了在 QueryBuilder 中使用连接之外,如下所示,并且不使用我的 ORM hasMany 属性型号:
$spatials = DB::table('rentals')
->join('regions', 'rentals.region_id', '=', 'regions.id')
->join('rental_locations', 'rentals.rental_location_id', '=', 'rental_locations.id')
->where('rentals.region_id', '=', $region_id)
->select('*')
->get();
基本上,我无法弄清楚如何获取所有租金及其位置信息的集合,这可以使用 ORM 吗?与联接相比,这似乎会变得昂贵,所以我假设您现在不使用 ORM 来排除 QueryBuilder,而是更多地仅补充简单快速的关系查询?
最佳答案
这里有几件事你应该知道。
首先,对于您的原始问题,您的代码将不起作用,因为您正试图访问 Collection
租赁模型的关系属性,而不是单个模型。如果您遍历 Collection
,您将能够很好地访问每个单独项目的 location
关系:
$region = Region::find(1);
$rentals = $region->rentals; // Collection of rentals for the region
foreach($rentals as $rental) {
print_r($rental->location); // location info for the individual rental
}
现在,关于上面的代码需要注意的一件事是您将遇到所谓的 N+1 问题。默认情况下,Laravel 延迟加载关系对象,因此在需要关系属性之前不会运行填充关系数据的查询。现在忽略区域,在上面的代码中,Laravel 将运行一个查询来获取所有租金,然后在 foreach 循环中,它将为每个循环迭代运行一个新查询(N 查询)以获取位置信息每笔租金;因此有 N+1 个查询。
为了缓解这个问题,您可以预先加载关系。通过预先加载,Laravel 将运行一个查询来获取租金,然后运行一个查询来获取所有租金的所有位置信息,总共需要两次查询(而不是 N+1)。把地区信息丢回去,其实是三个查询。
要预先加载关系,您可以在查询中使用 with()
方法:
// eager load the rentals, and the nested location on the rentals
// 1 query for region, 1 for all rentals on region, and 1 for all locations on rentals
$region = Region::with('rentals', 'rentals.location')->find(1);
// this is now accessing already loaded rentals; no lazy loading needed
$rentals = $region->rentals;
foreach($rentals as $rental) {
// this is now accessing already loaded locations; no lazy loading needed
print_r($rental->location);
}
另一个不同之处在于,延迟加载的关系在您访问它们之前不会显示,而急切加载的关系则立即可用,这可能使您认为您无法访问位置信息。当通过将对象打印到屏幕上进行调试时,这可能会让您认为您丢失了数据,而实际上并没有。我的意思是:
/**
* lazy load relationships
* This will only show the information for the region object. No
* rental or location information will be shown as it has not been
* loaded yet.
*/
$region = Region::find(1);
print_r($region);
/**
* eager load relationships
* This will show the information for the region object, as well as
* all of the related rental objects and their related location
* information.
*/
$region = Region::with('rentals', 'rentals.location')->find(1);
print_r($region);
关于php - Laravel 5 如何使用链接检索相关表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31413553/
我有一个网站,并且我使用 javascript sdk 添加了“点赞”按钮。 这是代码 (function(d, s, id) { var js, fjs = d.g
我知道 HTML 是逐行读取的。当您链接多个 css 文件(如规范化文件和样式表文件)时,由于 CSS 重要性特异性和源顺序,样式表文件应链接在规范化文件之后。看起来这不会影响链接的 JavaScri
我正在使用官方 Bootstrap site 提供的 CDN 链接在我的网络应用程序中使用面板进行测试 在彻底检查我的代码后,面板没有显示。 但是我在 SO 上看到了类似的帖子并且 CDN 链接不同
这里是编码初学者。我正在尝试为我的移动设备网站设置断点,以便我的网站适合小屏幕。我只是想检查如果我缩小视口(viewport)的宽度,背景颜色是否会改变,但没有发生任何变化。也许我只是对一个简单的错误
举一个我想要的例子,想象一下这个字符串: $text = 'lorem ipsum About us lorem ipsum'; 如果此字符串包含一个 href 以 / 开头的 anchor 链接,则
如何链接到 LaTeX 文档的另一部分或子部分?这种链接的常规范式是什么,像[链接名称]那样写,或者像网页超链接那样写? 最佳答案 链接到另一个部分需要您的部分进行一些额外的标记。要使用的命令是: \
我有一个订单表,其中包含订单号、客户 ID 和代理 ID。然后有一个带有 id 的客户表和一个带有 id 的代理表。 我需要获取所有具有来自代理 ID 'a03' 和代理 ID 'a05' 的订单的客
假设我有: dic = {"z":"zv", "a":"av"} ## Why doesn't the following return a sorted list of keys? keys = d
我在尝试链接到外部库时得到了一些奇怪的结果。如果我从命令行运行以下命令: gcc fftwTest.c -I../extlib/fftw-3.3.5-dll32 -L../extlib/fftw-3.
我认为我没有正确理解 jQuery 链接。我正在遍历一个数组并尝试将 div 元素添加到我的包装器 CSS 类中,每个 div 元素都有一个“click”类和自定义 css top 和 left 属性
HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。 HTML 超链接(链接) HTML使用标签 a 来设置超文本链接。 超链
这个问题在这里已经有了答案: How do I link to part of a page? (hash?) (7 个答案) Scroll Automatically to the Bottom
我想创建一个 Docker Swarm 集群,运行一个 Elasticsearch 实例、一个 MongoDB 实例和一个 grails 应用程序,每个都在单独的机器上。我正在使用 Docker Ma
我正在尝试将 CakePHP HTML Linker 用于以下代码 Add Cuisine 由于 span 标签需要在 a 标签内。我无法根据需要获得输出。关于如何完成它的任何建议? 最佳答案 禁用链
大家好, 我最近开发了一个应用程序,很快就会提交到 App Store。我想免费提交这个应用程序,并想知道我是否可以实现一个带有 PayPal 捐赠标志的按钮,上面基本上写着“捐赠用于开发”或与此相关
我想尝试在 dlang 中使用 libuv。我下载了这样的 dlang 绑定(bind): git clone git@github.com:tamediadigital/libuv.git 现在我接
我有一个节点(节点 a),各种其他节点(节点 b/c/d/e)与之引用。 我可以创建一个带有参数的 View 作为我正在查看的节点(节点 a),并获取引用该节点的节点列表。 基本上在节点 a 查看节点
我正在尝试建立一个常见问题页面,上面有目录,下面有答案。我想点击目录中的一个问题,并在同一页面上链接到相应的答案。我如何在 CakePHP 中使用 $this->Html->link() 执行此操作方
在 WooCommerce 3.0+ 中,我使用 js 创建了一些选项卡,每个选项卡中包含来自不同类别的产品。我已经设法修改了简单产品的添加到购物车链接,其中点击了 addtocart 按钮它进入下一
Delphi 2007/2009 奇怪的问题在这里: 根据设计时定义的组件属性,是否可以在链接中包含文件或保留文件? 示例:如果我将 SomeProperty 保留为真,则在编译时,单元 SomeUn
我是一名优秀的程序员,十分优秀!