Maison > base de données > tutoriel mysql > 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
Libérer: 2024-10-28 12:55:02
original
547 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal