1
votes

Laravel récupère les données de deux tables sans jointure avec pagination

Je souhaite récupérer les résultats de deux tableaux properties et properties_x properties.address ou properties_x.address_x comme test avec pagination laravel.

Il n'y a pas de relation de clé étrangère entre ces deux tables.

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 commentaires

Amélioration du formatage du code et des phrases


3 Réponses :


2
votes

Utilisez union all pour unir les données de deux tables,

Et obtenez les colonnes de ces données dans DB, afin que vous puissiez utiliser la pagination.

essayez-le comme ceci:

$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);


4 commentaires

@HarpalSingh oui, vous pouvez, mais vous devez sélectionner les colonnes avec le même nom, le même ordre et le même nombre.


Pouvez-vous me fournir la syntaxe pour la même chose?


comme $ p3 = DB :: table ('properties_x3') -> select ('title AS name', 'address'); $ p = $ p1-> unionAll ($ p2) -> unionAll ($ p3);


@HarpalSingh heureux que cela aide



0
votes

Je ne sais pas s'il existe un autre moyen, mais cela fonctionne bien pour moi

$res= [];

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

array_push($res,$tableOne);


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

array_push($res,$tableTwo);

maintenant $ res a les deux tables de données ensemble


1 commentaires

Mais j'ai besoin de données avec pagination



0
votes

union all then laravel query builder fournit la méthode unionAll pour mysql union. lorsque vous faites un gros projet ou un projet de niveau ERP, vous devez principalement utiliser l'union pour obtenir des données à partir d'une base de données avec plusieurs tables. Dans l'exemple suivant, vous pouvez voir comment utiliser union all dans Laravel 5.

Exemple:

$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);


0 commentaires