Kunci asing Laravel tidak mengeluarkan hasil yang dijangkakan
P粉924915787
P粉924915787 2024-03-31 16:45:38
0
1
518

Saya sedang membangunkan aplikasi web Laravel 9 di mana saya mempunyai dua jadual (usersfeedbacks),它们使用名为 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);
    }
}

UserModel-

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_tableMigrasi-

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_tableMigrasi-

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');
        });
    }

FeedbackControllerDapatkan 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.

P粉924915787
P粉924915787

membalas semua(1)
P粉378890106

Lakukan ini (hanya menyelesaikan isu pemuatan data)

1. Pemfaktoran semula dan penghijrahan

Penghijrahan Pengguna

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id'); # change your current primary key to this

    .... rest of the code
}

Migrasi Maklum Balas

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
}

2. Faktorkan semula model

//protected $primaryKey = 'username'; --> remove this

public function feedbacks() {
    return $this->hasMany(Feedback::class);
}

3. Dalam pengawal maklum balas

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'));
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan