Je souhaite récupérer les résultats de deux tableaux properties et properties_x où 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
3 Réponses :
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);
@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
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
Mais j'ai besoin de données avec pagination
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);
Amélioration du formatage du code et des phrases