Maison > Questions et réponses > le corps du texte
Je développe une application Web Laravel 9 dans laquelle j'ai deux tables (users
和 feedbacks
),它们使用名为 username
) jointes par des clés étrangères. .Mon problème est que les données utilisateur sont correctement obtenues, mais elles sont accompagnées de tous les commentaires au lieu de se connecter à cet utilisateur spécifique
select * from `feedback` where `feedback`.`username` = 0 and `feedback`.`username` is not null
Si je comprends bien, 0 doit être remplacé par le nom d'utilisateur de l'utilisateur. Y a-t-il quelque chose qui ne va pas ici?
反馈
Modèle-
class Feedback extends Model { use HasFactory; //One single user can have many feedbacks. public function user() { return $this->belongsTo(User::class); } }
User
Modèle-
class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ 'name', 'username', 'gender', 'email', 'password', 'is_admin', ]; /** * The attributes that should be hidden for serialization. * * @var array<int, string> */ protected $hidden = [ 'password', 'remember_token', 'is_admin', ]; protected $primaryKey = 'username'; public function feedbacks() { return $this->hasMany(Feedback::class, 'username'); } /** * The attributes that should be cast. * * @var array<string, string> */ protected $casts = [ 'email_verified_at' => 'datetime', ]; }
create_users_table
Migration-
public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('userId'); $table->string('name'); $table->string('username')->unique(); $table->string('gender'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->boolean('is_admin')->default(0); $table->rememberToken(); $table->timestamps(); }); }
create_feedback_table
Migration-
public function up() { Schema::create('feedback', function (Blueprint $table) { $table->increments('feedbackId'); $table->text('feedback'); $table->string('username'); $table->timestamps(); $table->foreign('username') ->references('username') ->on('users') ->onDelete('cascade'); }); }
FeedbackController
Obtenez des données,
class FeedbackController extends Controller { public function giveFeedback($username) { $userData = User::find($username); dd($userData->feedbacks); return view('feedback.givefeedback', compact('userData')); } }
users
Tableau-
feedback
Tableau-
Il s'agit de la sortie sur la lame, comme vous pouvez le voir, elle génère tous les commentaires, même si je n'ai demandé que les commentaires de nerigupex
en utilisant le routage.
Si vous avez besoin de plus de code pour résoudre ce problème, veuillez faire une demande et je mettrai à jour la question en conséquence. TIA.
P粉3788901062024-04-01 13:05:02
Faites ceci (résout uniquement le problème de chargement des données)
Migration des utilisateurs
Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); # change your current primary key to this .... rest of the code }
Migration des commentaires
Schema::create('feedback', function (Blueprint $table) { $table->bigIncrements('id'); # change your current primary key to this $table->unsignedBigInteger('user_id'); $table->foreign('user_id')->references('id')->on('users'); .... rest of the code }
//protected $primaryKey = 'username'; --> remove this public function feedbacks() { return $this->hasMany(Feedback::class); }
class FeedbackController extends Controller { public function giveFeedback($username) { $userData = User::with('feedbacks')->where('username', $username)->get(); dd($userData->feedbacks); return view('feedback.givefeedback', compact('userData')); } }