Saya sedang membangunkan aplikasi web Laravel 9 di mana saya mempunyai dua jadual (users
和 feedbacks
),它们使用名为 username
) yang disertai oleh kunci asing Setahu saya, jika saya mendapat butiran pengguna, data itu juga mengandungi yang berkaitan maklum balas .Masalah saya ialah data pengguna semakin betul tetapi ia disertakan dengan semua maklum balas dan bukannya menyambung kepada pengguna tertentu itu
select * from `feedback` where `feedback`.`username` = 0 and `feedback`.`username` is not null
Seperti yang saya faham, 0 harus digantikan dengan nama pengguna pengguna. Adakah terdapat sesuatu yang salah di sini?
反馈
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
Migrasi-
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
Migrasi-
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
Dapatkan data,
class FeedbackController extends Controller { public function giveFeedback($username) { $userData = User::find($username); dd($userData->feedbacks); return view('feedback.givefeedback', compact('userData')); } }
users
Meja-
feedback
Meja-
Ini adalah output pada bilah, kerana anda dapat melihatnya mengeluarkan semua maklum balas, walaupun saya hanya meminta maklum balas nerigupex
menggunakan penghalaan.
Jika anda memerlukan lebih banyak kod untuk menyelesaikan masalah ini, sila buat permintaan dan saya akan mengemas kini soalan itu dengan sewajarnya. TIA.
Lakukan ini (hanya menyelesaikan isu pemuatan data)
1. Pemfaktoran semula dan penghijrahan
Penghijrahan Pengguna
Migrasi Maklum Balas
2. Faktorkan semula model
3. Dalam pengawal maklum balas