امین
2 سال پیش توسط امین مطرح شد
6 پاسخ

کلید خارجی

سلام میخوام user_id رو کلید خارجی کنم
ولی خطای زیر رو دارم:
: Syntax error or access violation: 1068 Multiple primary key defined (SQL: alter table subs add primary key subs_id_primary(id))

این چیزی که تو migrationجدول دوم ام نوشتم:

            $table->unsignedBigInteger('user_id');
  $table->foreign('user_id')->references('id')->on('users');

ثبت پرسش جدید
رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش آپدیت شد
0

داخل جدول subs، خط دوم رو به صورت زیر بنویسید:

$table()->id();

الان جدولتون درسته و کار میکنه ولی برای اینکه کدتون تمیزتر بشه برای کلید خارجی خط ۳ و ۱۲ رو پاک کنید و به جاش کد زیر رو قرار بدین.

$table->foreignId('user_id')->constrained('users')->cascadeOnUpdate()->cascadeOnDelete();

موفق باشید.


امین
@alavi.gavad 2 سال پیش مطرح شد
0

(البته تو کد بالا من دو خط ای که مرتبط بودن رو نوشتم)


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
1

سلام به شما دوست عزیز.
ظاهرا دوتا کلید اصلی تعریف کردی، جدولتو کامل بفرست.


امین
@alavi.gavad 2 سال پیش آپدیت شد
0

سلام

 Schema::create('subs', function (Blueprint $table) {
            $table->id()->primary();
            $table->unsignedBigInteger('user_id');
            $table->string('name');
            $table->string('email');
            $table->tinyInteger('gender');
            $table->tinyInteger('age');
            $table->integer('price_spent');
            $table->tinyInteger('status');
            $table->timestamp('expired');
            $table->timestamps();
            $table->foreign('user_id')->references('id')->on('users');

پایین هم migration user

Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->tinyInteger('role');
            $table->string('name');
            $table->integer('age');
            $table->tinyInteger('gender');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش آپدیت شد
0

داخل جدول subs، خط دوم رو به صورت زیر بنویسید:

$table()->id();

الان جدولتون درسته و کار میکنه ولی برای اینکه کدتون تمیزتر بشه برای کلید خارجی خط ۳ و ۱۲ رو پاک کنید و به جاش کد زیر رو قرار بدین.

$table->foreignId('user_id')->constrained('users')->cascadeOnUpdate()->cascadeOnDelete();

موفق باشید.


امین
@alavi.gavad 2 سال پیش مطرح شد
0

خیلی ممنون درست شد


امیرحسین امینی
تخصص : Back-end Developer
@amirhosseinamini 2 سال پیش آپدیت شد
0

سلام
ببین باید توی جدولی که میخوای userid رو قرار بدی باید اینجوری بنویسی

$table->foreignIdFor(User::class)

مدل User رو هم یوز کن

با این روش دیگه نیازی نیست به روش های قدیمی بیاید اول فیلد استرینگ تعریف کنید و بعد onDelelte و onUpdate تعریف کنید. فقط همین فیلد رو قرار میدید خودش بر اساس نام مدل userid رو براتون قرار میده و به صورت اتوماتیک onDelete و onUpdate هم میشه


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام