Maison  >  Article  >  cadre php  >  [Notes d'évitement des fosses Laravel] Problème de rapport d'erreurs Laravel 42S01 420004 42S22] etc...

[Notes d'évitement des fosses Laravel] Problème de rapport d'erreurs Laravel 42S01 420004 42S22] etc...

藏色散人
藏色散人avant
2021-02-03 15:42:072261parcourir

Ce qui suit est la colonne Tutoriel Laravel pour vous présenter les problèmes de rapport d'erreurs Laravel 42S01 420004 42S22] etc... J'espère que cela sera utile aux amis qui j'en ai besoin !

Notes pour éviter les pièges de Laravel

Réseau source

1.Laravel 5.4 : La clé spécifiée était une erreur trop longue

Cause : à partir de LV 5.4, le jeu de caractères par défaut de la base de données est utf8mb4 (y compris la prise en charge des emojis). Si vous utilisez MySQL v5.7.7 ou supérieur, aucune modification n'est requise.
Les chaussures pour enfants qui utilisent des versions antérieures des bases de données MySQL (y compris MariaDB) peuvent être modifiées comme ceci. Modifiez le fichier /project/app/Providers/AppServiceProvider.php

use Illuminate\Support\Facades\Schema; // 注意要引入命名空间

 public function boot()
    {
        Schema::defaultStringLength(191); // 针对 早期 mysql 数据迁移
    }

puis réutilisez-le. la commande de migration :

php artisan migrate

2.SQLSTATE[42S01] : La table ou la vue de base existe déjà : 1050

La table existe déjà lors de la migration data,

Solution :

Supprimez la table existante puis migrez-la à nouveau.

3.PDOException ::("SQLSTATE[42000] : Erreur de syntaxe ou violation d'accès : 1067 Valeur par défaut non valide pour 'published_at'")

  • Première méthode de modification : vim config/database.php
'mysql' => [
     'driver' => 'mysql',.... ...
     'prefix' => '', 
     'strict' => true, // 修改这里
     'engine' => null,
 ],

est modifiée en :

'mysql' => [
     'driver' => 'mysql',.... ...
     'prefix' => '', 
     'strict' => false, // 修改这里
     'engine' => null,
 ],

Définir l'horodatage nullable :

$table->nullableTimestamps()

Définir l'horodatage par défaut

$table->timestamps('created_at');// 会生成created_at\updated_at字段

4.PDOException::("SQLSTATE[42S22] : Colonne introuvable : 1054 Colonne inconnue 'created_at' dans 'field list'")

Ce problème est dû au fait que le champ d'horodatage par défaut n'est pas défini lors de la migration de la table, mais la méthode d'usine est utilisée pour générer des données de départ. Vous pouvez modifier

public function up()
    {   
      Schema::create('posts', function (Blueprint $table) {
      $table->increments('id');
      $table->string('slug')->unique();
      $table->string('title');
      $table->text('content');
      $table->timestamps(); // 添加这行
      }); }

et répéter make:migration

Pour être précis, ce n'est pas le cas. un piège, car cette opération Il ne doit être exécuté qu'une seule fois

Mais pour les novices, il peut être exécuté plusieurs fois involontairement, et aucune erreur ne sera signalée lors de la création de:migration;
Il y a un problème lors de l'exécution de la migration Le voici :

[Notes dévitement des fosses Laravel] Problème de rapport derreurs Laravel 42S01 420004 42S22] etc...

La solution est de supprimer ou de modifier le nom de schéma de la même table.
[Notes dévitement des fosses Laravel] Problème de rapport derreurs Laravel 42S01 420004 42S22] etc...

5.php artisan db:seed le nom de la table devient pluriel et singulier

Cela peut être lié en Chinglish, les étrangers sont habitués à écrire les noms de table au pluriel, ils utilisent donc simplement par défaut le nom de table correspondant au modèle comme forme plurielle de ce mot anglais
Par conséquent, l'attribut $table doit être réécrit dans le modèle, tel que as :

protected $ table='student';

Recherchez sur Internet et enregistrez-le pour votre commodité et pour les autres

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer