اذهب إلى المحتوى
  • 0

مشكله انشاء مفتاح اجنبي

ايمن ميلاد

السؤال

لماذا عند انشاء مفتاح اجنبي تظهر مشكلة تالية في صورة 

اريد اضافة عمود اسمه id_dept  كمفتاح اجنبي في جدول الطالب وهو رئيسي في جدول القسم وما نفس النوع كتبت امر cmd  ثم كود في لارافيل ثم امر php artisan migrate

php artisan make:migration add_id_dept_to_students_table --table=students
 public function up(): void
    {
        Schema::table('students', function (Blueprint $table) {
            //
            
                $table->bigInteger('id_dept')->unsigned()->nullable()->after('id'); // أو بعد العمود الذي تريده
                $table->foreign('id_dept')->references('id')->on('departments')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('students', function (Blueprint $table) {
            //
            $table->dropForeign(['id_dept']);
            $table->dropColumn('id_dept');
        });
    }
};

 

 

2024-09-22200237.thumb.png.20a59d59f4cca4fbb2219f5cb7f91360.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الخطأ الذي ظهر لك يخبرك أن جدول "teachers" موجود بالفعل في قاعدة البيانات، وهذا هو سبب فشل عملية الهجرة، فالخطأ يتحدث عن مشكلة في إنشاء جدول بسبب تكرار الجدول الموجود بالفعل، وليس له علاقة مباشرة بالمفتاح الأجنبي الذي تحاول إضافته، و لتجاوز هذه المشكلة عند إضافة المفتاح الأجنبي لجدول "students"، يجب التأكد أولا من عدم وجود أخطاء في الجداول الأخرى مثل جدول "teachers"، و أيضا تأكد من أن الجدول "students" موجود وأنه لا يحتوي بالفعل على العمود "id_dept".

وإذا كنت تحاول إنشاء جدول موجود مسبقا، يمكنك إما حذف الجدول يدويا من قاعدة البيانات، أو استخدام الأمر:

php artisan migrate:rollback

لتراجع آخر عملية هجرة، أو استخدام:

php artisan migrate:fresh

لإعادة بناء جميع الجداول من البداية و لكن هذا هذا سيحذف جميع البيانات الحالية في الجداول.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعة قال Chihab Hedidi:

الخطأ الذي ظهر لك يخبرك أن جدول "teachers" موجود بالفعل في قاعدة البيانات، وهذا هو سبب فشل عملية الهجرة، فالخطأ يتحدث عن مشكلة في إنشاء جدول بسبب تكرار الجدول الموجود بالفعل، وليس له علاقة مباشرة بالمفتاح الأجنبي الذي تحاول إضافته، و لتجاوز هذه المشكلة عند إضافة المفتاح الأجنبي لجدول "students"، يجب التأكد أولا من عدم وجود أخطاء في الجداول الأخرى مثل جدول "teachers"، و أيضا تأكد من أن الجدول "students" موجود وأنه لا يحتوي بالفعل على العمود "id_dept".

وإذا كنت تحاول إنشاء جدول موجود مسبقا، يمكنك إما حذف الجدول يدويا من قاعدة البيانات، أو استخدام الأمر:

php artisan migrate:rollback

لتراجع آخر عملية هجرة، أو استخدام:

php artisan migrate:fresh

لإعادة بناء جميع الجداول من البداية و لكن هذا هذا سيحذف جميع البيانات الحالية في الجداول.

انا لدي جدول طالب وجدول القسم

اريد اضافة عمود رقم قسم id_dept مفتاح اجنبي في جدول طالب يظهر هذا خطأ لي 

هل ضروري احدد علاقة في model

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 27 دقائق مضت قال ايمن ميلاد:

انا لدي جدول طالب وجدول القسم

اريد اضافة عمود رقم قسم id_dept مفتاح اجنبي في جدول طالب يظهر هذا خطأ لي 

هل ضروري احدد علاقة في model

نعم من الأفضل تحديد العلاقة بين الجداول في Models لتسهيل العمل مع قواعد البيانات باستخدام، لكن تحديد العلاقة في Model ليس شرطا ضروريا لإضافة المفتاح الأجنبي على مستوى الهجرة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعة قال Chihab Hedidi:

نعم من الأفضل تحديد العلاقة بين الجداول في Models لتسهيل العمل مع قواعد البيانات باستخدام، لكن تحديد العلاقة في Model ليس شرطا ضروريا لإضافة المفتاح الأجنبي على مستوى الهجرة.

لماذا لم يعمل 

php artisan make:migration add_department_id_to_students_table --table=students
class student extends Model
{
    use HasFactory;

    protected $fillable = ['name_std', 'num_std', 'email_std', 'date_student', 'adress_std', 'phone', 'gender', 'image'];
    public function department()
    {
        return $this->belongsTo(Department::class);
    }
}
class Department extends Model
{
    use HasFactory;
    public function students()
    {
        return $this->hasMany(Student::class);
    }
}
 public function up(): void
    {
        Schema::table('students', function (Blueprint $table) {
            //
            $table->foreignId('department_id')->constrained()->after('name')->onDelete('cascade');

        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('students', function (Blueprint $table) {
            //
            $table->dropForeign(['department_id']);
            $table->dropColumn('department_id');
        });
    }

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...