Ich entwickle eine Laravel 9-Webanwendung, in der ich zwei Tabellen (users
和 feedbacks
),它们使用名为 username
) habe, die durch Fremdschlüssel verbunden sind. Soweit ich weiß, enthalten die Daten auch relevante Informationen Feedback. Mein Problem ist, dass die Benutzerdaten korrekt empfangen werden, aber das gesamte Feedback enthalten ist, anstatt eine Verbindung zu diesem bestimmten Benutzer herzustellen
select * from `feedback` where `feedback`.`username` = 0 and `feedback`.`username` is not null
Soweit ich weiß, sollte 0 durch den Benutzernamen des Benutzers ersetzt werden. Stimmt hier etwas nicht?
反馈
Model-
class Feedback extends Model { use HasFactory; //One single user can have many feedbacks. public function user() { return $this->belongsTo(User::class); } }
User
Model-
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
Daten abrufen,
class FeedbackController extends Controller { public function giveFeedback($username) { $userData = User::find($username); dd($userData->feedbacks); return view('feedback.givefeedback', compact('userData')); } }
users
Tisch-
feedback
Tisch-
Dies ist die Ausgabe auf dem Blade, wie Sie sehen können, gibt es das gesamte Feedback aus, obwohl ich nur nerigupex
s Feedback über Routing angefordert habe.
Wenn Sie mehr Code zur Lösung dieses Problems benötigen, stellen Sie bitte eine Anfrage und ich werde die Frage entsprechend aktualisieren. TIA.
这样做(仅解决数据加载问题)
1。重构迁移
用户迁移
反馈迁移
2。重构模型
3。在反馈控制器中