【问题标题】:how to retrieve multiple table data with multiple criteria in laravel eloquent?如何在 laravel eloquent 中检索具有多个条件的多个表数据?
【发布时间】:2019-04-24 13:38:04
【问题描述】:

我想使用具有多个条件的 laravel eloquent 从 4 个不同的表中检索数据。

我的桌子概览;

表 1

  • 身份证
  • 姓名

表 2

  • 身份证
  • 姓名
  • table1_id

表 3

  • 身份证
  • 姓名
  • 说明
  • table2_id

表 4

  • 身份证
  • 姓名
  • 季度
  • table3_id

下面是他们的关系


表 1

hasMany -> table 2

表 2

 belongsTo ->table1
 HasMany->table2

表 3

 belongsTo ->table2
 HasMany->table3

表 4

belongsTo ->table3

我想用两个参数通过资源显示获取数据 我试过这个

   $Report = Table1::whereHas('tabke1', function($query){
        $query->where('year', 'like','%'.$year.'%');
      })
      ->with('table2')->whereHas('table3', function($query){
        $query->where('quarter', 'like', '%'.$quarters.'%');
      })
      ->get();

但我收到语法错误。

如何使用多个过滤器从多个表中检索数据? 我尝试了这个表查询以了解更多我的期望

SELECT `table1`.*, `table2`.*, `table3`.*, `table4`.*
FROM `table1`, `table2`, `table3`, `table4`
WHERE ((`table2`.* year = 2019) AND (`table4`.* quarter = 1))

【问题讨论】:

  • 语法错误是什么?
  • 调用未定义的方法 App\tabl1::table4()

标签: laravel eloquent


【解决方案1】:

我认为有两个查询可以达到结果。

第一个查询类似于:

Table1::whereHas('table2', function ($query) {
    $query->where('year', 2019);
})
->whereHas('table2.table3.table4', function ($query) {
    $query->where('quarter', 1);
})
->get();

第二个查询是这样的:

Table1::select('table1.*')
->join('table2', 'table1.id', '=', 'table2.table1_id')
->join('table3', 'table2.id', '=', 'table3.table2_id')
->join('table4', 'table3.id', '=', 'table4.table3_id')
->where('table2.year', 2019)
->where('table4.quarter', 1)
->distinct()
->get();

关于性能,我更喜欢第二个查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2014-01-10
    • 2015-07-08
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多