Laravel-excel: [BUG] Erreur lors de l'importation: objet beginTransaction

Créé le 16 janv. 2019  ·  13Commentaires  ·  Source: Maatwebsite/Laravel-Excel

Conditions préalables

  • [x] Capable de reproduire le comportement en dehors de votre code, le problème est isolé sur Laravel Excel.
  • [x] Vérifié que votre problème n'est pas déjà classé.
  • [x] Vérifié si aucun PR n'a été soumis pour résoudre ce problème.

Versions

  • Version PHP: 7.2
  • Version Laravel: 5.7.17
  • Version du paquet: 3.1.3

La description

J'ai créé la classe d'objets d'importation et spécifié les préoccupations de ToCollection. Lors de l'exécution d'Excel :: import, je reçois une erreur affichée dans Actual Behavior ci-dessous.

Étapes à suivre pour reproduire

N'utilisez pas de base de données transactionnelle. Nous utilisons MongoDB.

En dehors de cela, l'importation de modèle n'a pas été spécifiée et le package ne devrait pas faire de préparation de base de données, qui devrait être gérée par des événements par le développeur.

Comportement prévisible:

jj des lignes de la collection.

Comportement réel:

1) Tests\Unit\Services\Websites\WebsiteCredentialsImportServiceTest::testImportTabDelimited
Error: Call to a member function beginTransaction() on null

/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:109
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:93
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:23
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:327
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:223
/var/www/vhosts/website.local/vendor/maatwebsite/excel/src/Reader.php:96
/var/www/vhosts/website.local/vendor/maatwebsite/excel/src/Excel.php:120
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:223
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:198
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:182
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:122
/var/www/vhosts/website.local/tests/Unit/Services/Websites/WebsiteCredentialsImportServiceTest.php:25

Informations Complémentaires

<?php

namespace App\Imports\Websites;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;

/**
 * Class WebsiteCredentialsImport
 *
 * <strong i="29">@package</strong> App\Imports\Websites
 */
class WebsiteCredentialsImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        dd(['COLLECTION' => $rows]);
    }
}
        $collection = Excel::import(
            new WebsiteCredentialsImport,
            $this->file_name,
            null,
            $this->reader_type
        );
enhancement help wanted

Commentaire le plus utile

Peut-être que vous rencontrez le même problème que moi au # 2384

Peut-être que ma solution fonctionnerait pour vous, essayez un:

php artisan config:clear

Parfois, spécialement lors de la mise à jour d'un paquet, Laravel ne nettoiera pas le cache et votre paquet ne trouvera pas les fichiers de configuration. Ainsi, le pilote sera toujours NULL et échouera.

Tous les 13 commentaires

Nous utilisons les transactions de base de données pour la validation et les insertions de lots. Ils sont tout à fait vitaux pour les utilisateurs d'Eloquent / Laravel-DB. Heureux de fusionner un PR qui donne une option de configuration pour le désactiver pour les utilisateurs qui utilisent .eg Mongo

La prochaine version aura un paramètre pour désactiver les transactions Laravel-DB + un moyen d'ajouter des gestionnaires de transactions personnalisés

Salut !

Je suis dans la situation très exacte: je n'ai PAS besoin d'enregistrer les données lues et j'utilise Mongo.

Pourriez-vous m'indiquer s'il vous plaît le code qui désactive les transactions?

Salut !

Je suis dans la situation très exacte: je n'ai PAS besoin d'enregistrer les données lues et j'utilise Mongo.

Pourriez-vous m'indiquer s'il vous plaît le code qui désactive les transactions?

https://github.com/Maatwebsite/Laravel-Excel/commit/13374dab1592f00f715fa0e02541ecb52217655b#diff -19c82312ec0dbaba6a8c595db14fa56f

Section de documentation pertinente: https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions

Salut, je suis dans la même situation: je dois lire un fichier Excel et je dois le stocker dans mongodb.
J'ai lu le correctif et l'erreur que j'ai maintenant est:
"Impossible de résoudre le pilote NULL pour [MaatwebsiteExcel \ Transactions \ TransactionManager]."
Avez-vous une idée de la façon de le résoudre?
Merci pour le super package.

edit: j'ai utilisé l'importation dans la collection et cela fonctionne, mais je ne sais toujours pas pourquoi l'importation dans le modèle est interrompue

Parce que Collection n'utilise pas de transactions. Veuillez vous référer à mon commentaire précédent, il explique comment désactiver les transactions.

Parce que Collection n'utilise pas de transactions. Veuillez vous référer à mon commentaire précédent, il explique comment désactiver les transactions.

Bonjour, merci pour votre réponse rapide.
J'ai lu votre commentaire, c'est pourquoi j'ai reçu le message "Impossible de résoudre le pilote NULL pour [MaatwebsiteExcel \ Transactions \ TransactionManager]." Erreur.
Alors je suis passé à la collection

Vous êtes probablement en train de taper quelque chose de mal dans votre configuration. NULL ne sonne pas comme un pilote valide. 'null' (notez qu'il s'agit d'une chaîne) est.

J'ai aussi la même situation, j'ai eu la solution sur https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions
Mais, je ne sais pas comment créer Custom transaction handlers et où l'utiliser

J'ai aussi mongodb. ce https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions fonctionne pour moi. Merci @patrickbrouwers

Peut-être que vous rencontrez le même problème que moi au # 2384

Peut-être que ma solution fonctionnerait pour vous, essayez un:

php artisan config:clear

Parfois, spécialement lors de la mise à jour d'un paquet, Laravel ne nettoiera pas le cache et votre paquet ne trouvera pas les fichiers de configuration. Ainsi, le pilote sera toujours NULL et échouera.

Peut-être que vous rencontrez le même problème que moi au # 2384

Peut-être que ma solution fonctionnerait pour vous, essayez un:

php artisan config:clear

Parfois, spécialement lors de la mise à jour d'un paquet, Laravel ne nettoiera pas le cache et votre paquet ne trouvera pas les fichiers de configuration. Ainsi, le pilote sera toujours NULL et échouera.

Meilleure réponse

Cette page vous a été utile?
0 / 5 - 0 notes