Maison  >  Article  >  base de données  >  Comment insérer efficacement des données à l'aide de « Insérer... Sélectionner » dans Laravel ?

Comment insérer efficacement des données à l'aide de « Insérer... Sélectionner » dans Laravel ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 12:55:02477parcourir

How to Efficiently Insert Data Using `Insert... Select` in Laravel?

Insertion efficace de données à l'aide de l'insertion... Sélectionner dans Laravel

Conversion de requête pour Laravel

Pour convertir la requête SQL fournie en une expression Laravel, il est crucial de comprendre que Laravel 5.6 et les versions antérieures ne prennent pas en charge directement les opérations d'insertion... Sélection. Cela signifie qu'une conversion directe n'est pas possible.

Approche alternative dans Laravel

Cependant, il existe une solution de contournement qui vous permet d'obtenir le résultat souhaité. Au lieu de tenter une seule requête, vous pouvez la diviser en deux étapes :

  1. Utilisez QueryBuilder de Laravel pour construire une requête Select qui récupère les données nécessaires. Utilisez la méthode getBindings() pour extraire les paramètres de liaison.
  2. Utilisez une requête SQL brute pour effectuer l'insertion à l'aide des données récupérées à l'étape 1. Liez les paramètres de liaison obtenus à partir de getBindings().

Exemple de code :

<code class="php">// Step 1: Generate the Select query
$select = User::where(...)
                  ->where(...)
                  ->whereIn(...)
                  ->select(array('email','moneyOwing'));

// Step 2: Get binding parameters
$bindings = $select->getBindings();

// Step 3: Construct raw SQL insert query
$insertQuery = 'INSERT into user_debt_collection (email,dinero) '
                . $select->toSql();

// Step 4: Execute the insert
\DB::insert($insertQuery, $bindings);</code>

Laravel 5.7 Update

Laravel 5.7 a introduit la méthode ->insertUsing(), fournissant prise en charge directe de Insérer... Sélectionner. L'exemple précédent serait simplifié en :

<code class="php">DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn