Laravel crée une mauvaise table
P粉546257913
P粉546257913 2024-03-31 23:23:45
0
2
374

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粉546257913
P粉546257913

répondre à tous(2)
P粉021708275

Ajouter protected $table = 'download_history';

au modèle
 'array',
    ];

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

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';
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal