Maison  >  Questions et réponses  >  le corps du texte

Laravel crée une mauvaise table

J'ai besoin d'avoir l'historique de téléchargement de chaque utilisateur qui utilisera notre système (essentiellement, un système permettant aux utilisateurs de télécharger des publications sur les réseaux sociaux). J'ai créé un modèle "DownloadHistory" qui contient les champs ID, timestamp, download_history et user_id. Lorsque je crée un utilisateur, une instance de DownloadHistory doit être automatiquement créée et la table des utilisateurs mise à jour pour que le champ download_history_id contienne l'identifiant de DownloadHistory nouvellement créé, comme indiqué dans mon RegisterController :

$downloadHistory = DownloadHistory::create([
    'user_id' => $user->id
]);

DB::table('users')->where('id', $user->id)->update(['download_history_id' => $downloadHistory->id]);

Le problème est le suivant : j'obtiens une erreur qui n'a aucun sens pour moi :

La raison pour laquelle cela n'a pas de sens pour moi est que je n'ai jamais créé download_history, mais j'ai créé download_history, alors qu'est-ce que c'est ? ? ? Mon modèle DownloadHistory est :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class DownloadHistory extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
    ];

    protected $casts = [
       'downloads' => 'array',
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Ma migration pour créer la table est :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateDownloadHistoryTable extends Migration
{  
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('download_history', function (Blueprint $table) {
            $table->id();                        
            $table->timestamps();
            $table->json('history');
            $table->integer('user_id');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('download_history');
    }
}

P粉546257913P粉546257913224 Il y a quelques jours338

répondre à tous(2)je répondrai

  • P粉021708275

    P粉0217082752024-04-01 20:50:00

    Ajouter protected $table = 'download_history';

    au modèle
     'array',
        ];
    
        public function user()
        {
            return $this->belongsTo(User::class);
        }
    }

    répondre
    0
  • P粉068510991

    P粉0685109912024-04-01 14:32:36

    Dans Laravel, les noms de tables sont supposés être au pluriel.

    Référence : https://laravel.com/docs/9.x /eloquent#Table name

    Pour résoudre ce problème, utilisez l'attribut $table dans votre modèle.

    protected $table = 'download_history';

    répondre
    0
  • Annulerrépondre