Laravel 从两个表中获取数据而不使用分页连接

Posted

技术标签:

【中文标题】Laravel 从两个表中获取数据而不使用分页连接【英文标题】:Laravel fetch data from two tables without join with pagination 【发布时间】:2020-05-01 06:05:32 【问题描述】:

我想从两个表 propertiesproperties_x 中获取结果,其中 properties.addressproperties_x.address_x 就像 test 使用 laravel 分页。

这两个表之间没有外键关系。

properties

id  name    address
1   test1   
2   test2   
3   test3   
4   test3   test
5   test4   test

properties_x

id  name    address
1   test1_x test
2   test2_x 
3   test3_x 
4   test3_x test
5   test4_x 

    Expected results:
    name     address
    test3    test
    test4    test
    test1_x  test
    test3_x  test

【问题讨论】:

代码格式化和句子改进 【参考方案1】:

使用union all合并两个表的数据,

并从数据库中的这些数据中获取列,以便您可以使用分页。

像这样尝试:

$p1 = DB::table('properties')
        ->where('address', 'test')
        ->select('name', 'address');

$p2 = DB::table('properties_x')
         ->where('address', 'test')
         ->select('name', 'address');

$p = $p1->unionAll($p2);

DB::table(DB::raw("($p->toSql()) AS p"))
->mergeBindings($p)
->select('name', 'address')
->paginate(10);

【讨论】:

@HarpalSingh 是的,您可以,但您需要选择相同名称、相同顺序和相同数量的列。 可以,请您提供相同的语法吗? 点赞$p3 = DB::table('properties_x3') ->select('title AS name', 'address'); $p = $p1->unionAll($p2)->unionAll($p3); @HarpalSingh 很高兴它有帮助【参考方案2】:

我不知道是否有其他方法,但它对我很有效

$res= [];

$tableONe = Property::where('address','test')->get();

array_push($res,$tableOne);


$tableTwo = PropertyX::where('address','test')->get();

array_push($res,$tableTwo);

现在 $res 将两个数据表放在一起

【讨论】:

但我需要分页数据【参考方案3】:

union all 然后 laravel 查询生成器为 mysql union 提供 unionAll 方法。当您进行大型项目或 ERP 级项目时,大多数情况下您需要使用 union 从具有多个表的数据库中获取数据。在以下示例中,您可以看到如何在 Laravel 5 中使用 union all。

例子:

$silver = DB::table("product_silver")
    ->select("product_silver.name"
      ,"product_silver.price"
      ,"product_silver.quantity");
$gold = DB::table("product_gold")
    ->select("product_gold.name"
      ,"product_gold.price"
      ,"product_gold.quantity")
    ->unionAll($silver)
    ->get();
print_r($gold);

【讨论】:

以上是关于Laravel 从两个表中获取数据而不使用分页连接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用连接从 3 级表中获取数据 [Laravel]

如何使用 Laravel 在 LIKE 搜索中使用 ORM 从两个表中获取数据

如何从 db 中的两个表中路由、获取和显示数据到 laravel 5.2 中的单个网页

Laravel 4 多对多从两个表中获取所有数据

如何从laravel中间接连接的表中检索数据?

Laravel 5.3 查询从通过外键连接的 4 个表中获取结果