###

今天在连表获取数据的时候,老是获取不到想要的,确实有点无力适从的感觉。

归根到底,还是对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数据库--多个关联关系,带条件约束的渴求式加载的问题的更多相关文章

  1. Laravel渴求式加载(比较容易理解理解load与with关系)

    渴求式加载 当以属性方式访问 Eloquent关联关系的时候,关联关系数据是「懒惰式加载」的,这意味着关联关系数据直到第一次访问的时候才被加载.不过,Eloquent 还可以在查询父级模型的同时「渴求 ...

  2. laravel 嵌套的渴求式加载

    今天在通过需求表A查询场地类型表B,然后通过表B的场地类型id去查询表C场地类型名的时候遇到了一个小的问题. 需求表A的字段:id.user_id .name等等: 中间表B的字段:id.appeal ...

  3. laravel with嵌套的渴求式加载

    今天在通过需求表A查询场地类型表B,然后通过表B的场地类型id去查询表C场地类型名的时候遇到了一个小的问题. 需求表A的字段:id.user_id .name等等: 中间表B的字段:id.appeal ...

  4. laravel with 渴求式加载指定字段

    在使用 Laravel 的关联查询中,我们经常使用 with 方法来避免 N+1 查询,但是 with 会将目标关联的所有字段全部查询出来,对于有强迫症的我们来说,当然是不允许的. 这时候我们可以使用 ...

  5. 页面ajax自带的访问后台时,正在加载中

    ajax自带访问后台时,提示正在加载中,加载完成后自动消除遮罩层,代码如下: var mask=mui.createMask();//遮罩层 //传统ajax的post请求方式 mui.ajax('h ...

  6. 带你剖析WebGis的世界奥秘----瓦片式加载地图(转)

    带你剖析WebGis的世界奥秘----瓦片式加载地图 转:https://zxhtom.oschina.io/zxh/20160805.html  编程  java  2016/08/05 0留言,  ...

  7. 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载

    要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...

  8. 带你剖析WebGis的世界奥秘----瓦片式加载地图

    WebGIS应用程序的页面能够通过HTML.JSP.ASP或任何任何类型的Web页文件构成,其特殊之处在于,它的请求提交的方法并不是通过常用的 "超链接"形式,而是使用鼠标与Web ...

  9. EularProject 43: 带条件约束的排列组合挑选问题

    Sub-string divisibility Problem 43 The number, 1406357289, is a 0 to 9 pandigital number because it ...

随机推荐

  1. GeoGlobe Server使用问题收集

    本人在做数字县区过程中,需要吉奥GeoGlobe Server发布数据,期间遇到些平台问题.故立此帖,作为参考. 1 字段限制: GeoGlobe 5.2部署在我的服务器Windows Server ...

  2. ext.net 实现gridpanel checkbox锁定

    <%@ Page Language="C#" %> <%@ Register Assembly="Ext.Net" Namespace=&qu ...

  3. 使用phpexcel上传下载excel文件

    1. 下载 <?php /** * Created by lonm.shi. * Date: 2012-02-09 * Time: 下午4:54 * To change this templat ...

  4. Js调用asp.net后台代码

    方法一:         1.首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2.在前台写一个js函数,内容为document.getElementById("b ...

  5. ES6 快速开始

    Refs 现代框架 Vue React 都使用到了 ES6 (包括D3js) [常量] // ES5 中常量的写法 Object.defineProperty(window, "PI2&qu ...

  6. Ubuntu中在服务器和本机之间传递文件

    首先可以通过root进入到服务器中,(登录方法在下面讲解)为自己创建一个用户. useradd的选项: 选项: -b, --base-dir BASE_DIR 新账户的主目录的基目录 -c, --co ...

  7. Linux LVM 逻辑分区

    LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现.普通 ...

  8. Important persons in deep learning

    Geoffrey Hinton Pieter Abbeel Ian Goodfellow, GAN之父 2019.3 任 Apple Director Andrej Karpathy. 视觉大牛,李飞 ...

  9. SQLQueryStress

    工具介绍及使用链接:http://www.cnblogs.com/lyhabc/p/3187922.html 工具下载链接:http://files.cnblogs.com/files/coce/sq ...

  10. Centos 02 操作系统 & Linux安装

    操作系统的概念 操作系统是沟通使用者和硬件之间传递信息的工具或程序,是电子计算机系统负责支撑应用程序运行环境以及用户操作环境的基础系统软件 硬件 ==> 系统核心 ==> 命令解释器she ...