Laravel 5.2数据库--多个关联关系,带条件约束的渴求式加载的问题
###
今天在连表获取数据的时候,老是获取不到想要的,确实有点无力适从的感觉。
归根到底,还是对laravel不够熟悉,至少是数据库操作那块。
###
问题是这样的:
我想要通过连表中间表,拿中间表的id。但是product 在关联的中间表中有多个,需要brandId,categoryId去限制获取,然后就可以获取到,但是我实际操作的时候却不是想要的结果。
获取的是categoryId=50 ,brand_id=1 的所有商品,还有需要中间表的id
array:10 [▼0 => array:21 [▼"id" => 323
"name" => ""
"snumber" => ""
"number" => 0
"product_categories" =>
0 => array:6 [▼
"id" => 20
"product_id" => 323
"category_id" => 2
"brand_id" => 1
"created_at" => "2017-04-17 13:16:42"
"updated_at" => "2017-04-17 13:16:42"
]
1 => array:6 [▼
"id" => 458
"product_id" => 323
"category_id" => 1
"brand_id" => 1
"created_at" => "2017-04-17 15:40:34"
"updated_at" => "2017-04-17 15:40:34"
]
2 => array:6 [▼
"id" => 758
"product_id" => 323
"category_id" => 50
"brand_id" => 1
"created_at" => "2017-04-17 17:21:30"
"updated_at" => "2017-04-17 17:21:30"
]
3 => array:6 [▼
"id" => 991
"product_id" => 323
"category_id" => 47
"brand_id" => 1
"created_at" => null
"updated_at" => null
]
]
] 1 => array:21 [▶] 2 => array:21 [▶] 3 => array:21 [▶] 4 => array:21 [▶] 5 => array:21 [▶] 6 => array:21 [▶] 7 => array:21 [▶] 8 => array:21 [▶] 9 => array:21 [▶] ]
我只想要的是product_categories 中的第2个数组就行
方法是:
$productIds = ProductCategories::where('category_id', $categoryId)
->where('brand_id', $brandId)
->pluck('product_id', 'id')
->all();
$products = Product::whereIn('id', $productIds)
->with('productCategories')
->whereHas('productCategories', function ($q1) use ($categoryId, $brandId) {
return $q1->where(['brand_id' => $brandId,'category_id' => $categoryId]);
})
->get();
发现这样操作并不行。。。
搞好久还是老实的去看文档

$productIds = ProductCategories::where('category_id', $categoryId)
->where('brand_id', $brandId)
->pluck('product_id', 'id')
->all();
$products = Product::whereIn('id', $productIds)
->with(['productCategories' => function ($q1) use ($categoryId, $brandId){
$q1->where(['brand_id' => $brandId ,'category_id' => $categoryId]);
}])
->get();
结果就可以了:
array:10 [▼
0 => array:21 [▼
"id" => 323
"name" => ""
"snumber" => ""
"number" => 0
"product_categories" => array:1 [▼
0 => array:6 [▼
"id" => 758
"product_id" => 323
"category_id" => 50
"brand_id" =>
"created_at" => "2017-04-17 17:21:30"
"updated_at" => "2017-04-17 17:21:30"
]
]
]
Laravel 5.2数据库--多个关联关系,带条件约束的渴求式加载的问题的更多相关文章
- Laravel渴求式加载(比较容易理解理解load与with关系)
渴求式加载 当以属性方式访问 Eloquent关联关系的时候,关联关系数据是「懒惰式加载」的,这意味着关联关系数据直到第一次访问的时候才被加载.不过,Eloquent 还可以在查询父级模型的同时「渴求 ...
- laravel 嵌套的渴求式加载
今天在通过需求表A查询场地类型表B,然后通过表B的场地类型id去查询表C场地类型名的时候遇到了一个小的问题. 需求表A的字段:id.user_id .name等等: 中间表B的字段:id.appeal ...
- laravel with嵌套的渴求式加载
今天在通过需求表A查询场地类型表B,然后通过表B的场地类型id去查询表C场地类型名的时候遇到了一个小的问题. 需求表A的字段:id.user_id .name等等: 中间表B的字段:id.appeal ...
- laravel with 渴求式加载指定字段
在使用 Laravel 的关联查询中,我们经常使用 with 方法来避免 N+1 查询,但是 with 会将目标关联的所有字段全部查询出来,对于有强迫症的我们来说,当然是不允许的. 这时候我们可以使用 ...
- 页面ajax自带的访问后台时,正在加载中
ajax自带访问后台时,提示正在加载中,加载完成后自动消除遮罩层,代码如下: var mask=mui.createMask();//遮罩层 //传统ajax的post请求方式 mui.ajax('h ...
- 带你剖析WebGis的世界奥秘----瓦片式加载地图(转)
带你剖析WebGis的世界奥秘----瓦片式加载地图 转:https://zxhtom.oschina.io/zxh/20160805.html 编程 java 2016/08/05 0留言, ...
- 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载
要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...
- 带你剖析WebGis的世界奥秘----瓦片式加载地图
WebGIS应用程序的页面能够通过HTML.JSP.ASP或任何任何类型的Web页文件构成,其特殊之处在于,它的请求提交的方法并不是通过常用的 "超链接"形式,而是使用鼠标与Web ...
- EularProject 43: 带条件约束的排列组合挑选问题
Sub-string divisibility Problem 43 The number, 1406357289, is a 0 to 9 pandigital number because it ...
随机推荐
- solr插件导入数据库中的数据
solr插件导入数据库中的数据 1:自定义与数据库对应的域: 1.1. 设置业务系统Field 如果不使用Solr提供的Field可以针对具体的业务需要自定义一套Field. 例如:如下是商品信息Fi ...
- 数据结构Java实现01----线性表与顺序表
一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...
- NSScanner类的基本用法
NSScanner是一个类,用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串.可以在创建NSScaner时指定它的string属性,然后scanner会按照你的要求从头到尾地扫描 ...
- luogu 3582 线段树
线段树内存下mx[k]的值是动态的1-i这个区间的贡献答案 实际上点存的就是区间答案,但用max是为了求最大区间答案(有可能虽然贡献被消除但后来有更大的贡献填补答案空缺) #include<bi ...
- c++过程
<<C++ beginner >> 入门 <<C++ primer>> 基础 <<The C++ programming language ...
- Xshell 无法连接虚拟机中的ubuntu的问题
转自:http://blog.csdn.net/qq_26941173/article/details/51173320 版权声明:本文为博主原创文章,未经博主允许不得转载. 昨天在VMware P ...
- 20155324 2016-2017-2 《Java程序设计》第9周学习总结
20155324 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛 ...
- js apply使用
js中apply方法的使用 1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destinati ...
- NLTK1及NLP理论基础
以下为Aron老师课程笔记 一.NLTK安装 1. 安装nltk https://pypi.python.org/pypi/nltk 把nltk-3.0.0解压到D:\Anacond3目录 打开cmd ...
- JQ中的 offsetTop 和 offset().top 的区别
话不多说先上图: offset()的top是指元素与document的上边的距离,而不是浏览器当前窗体的上边缘,如图 document高度超过window,浏览器出现滚动条,滚动滚动条,提交按钮的of ...