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.
Faites ceci (résout uniquement le problème de chargement des données)
1. Refactorisation et migration
Migration des utilisateurs
Migration des commentaires
2. Refactoriser le modèle
3. Dans un contrôleur de feedback