首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >其中查询相关表

其中查询相关表
EN

Stack Overflow用户
提问于 2015-10-08 14:12:50
回答 1查看 304关注 0票数 0

我一直在尝试一个查询,我想在相关的表上做一些验证。我想用Laravel 5做一些类似的事情

代码语言:javascript
复制
select
  * 
from 
  table1 
    INNER JOIN table3 on(table1.id = table3.table1_id) 
    INNER JOIN table2 on(table1.id = table2.table1_id) 
where 
  table2.column2 in ('arr1', 'arr2');

另外,table1与5-7个表相关,我想立即加载所有这些。这是我到目前为止所得到的

代码语言:javascript
复制
$reports = Table1::with(
        [
            'table3',
            'table4',
            'table5.table6',
            'table7',
            'table8',
        ])
        ->where('created_at', '>=', date('Y-m-d', strtotime($request->get('from'))))
        ->where('created_at', '<', date('Y-m-d', strtotime($request->get('to'))))
        ->with('table2',function($query) use($table1_column){
                return $query->whereIn('table1_column',$table1_column);
        });

但这会显示所有内容。甚至是table2中不存在的项目。我想要实现的是创建一个结果,其中所有项都是table2中唯一存在的项。指的是使用table2中的项目进行的所有交易。假设table2中的项的id分别为123、456和789,那么我希望显示与此id相关的所有记录

我怎样才能得到这样的结果呢?

EN

回答 1

Stack Overflow用户

发布于 2015-10-08 20:00:25

您可以使用whereHas方法。

代码语言:javascript
复制
$reports = Table1::with(
    [
        'table3',
        'table4',
        'table5.table6',
        'table7',
        'table8',
    ])
    ->whereHas('table2', function($query) use($table1_column){
            return $query->whereIn('table1_column',$table1_column);
    })
    ->where('created_at', '>=', date('Y-m-d', strtotime($request->get('from'))))
    ->where('created_at', '<', date('Y-m-d', strtotime($request->get('to'))));

请注意,这不包括结果集中的表2数据。如果需要,可以在with方法调用中包含table2关系名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33007904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档