Rumah  >  Soal Jawab  >  teks badan

Kunci asing Laravel tidak mengeluarkan hasil yang dijangkakan

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粉924915787P粉924915787175 hari yang lalu377

membalas semua(1)saya akan balas

  • P粉378890106

    P粉3788901062024-04-01 13:05:02

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

    balas
    0
  • Batalbalas