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'); } }
Ajouter
au modèleprotected $table = 'download_history';
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.