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

كيف يمكنني إنشاء علاقة many to many في مكتبة sequelize

مروان محمود3

السؤال

Recommended Posts

  • 0

علاقة الmany to many أو للإختصار nm حتى يتم إنشاؤها نحتاح أولاً إنشاء جدول حتى يتم فيه تخزين المفتاح الرئيسي للجدولين المراد عمل علاقة بينهما فمثلاً

table user{
name,age,id
}
table article{
title,content,id
}

table user_article{
user_id(references user(id)), article_id(references article(id))
}

هنا لدينا جدولين هما user و article , المستخدم يمكنه كتابة عدة مقالات, كما أن المقالة الواحدة ممكن كتابتها من قِبل عدة مستخدمين , فإذا بينهما علاقة كثير:كثير (may to many) , الحل أننا قمنا بإنشاء جدول ثالث يربط بين الجدولين السابقين, فإذا يجب تطبيق هذا الأمر في sequelize  كما في المثال الآتي:

const User_Article = sequelize.define('user_article', {}, { timestamps: false });

بعد أن قمنا بإنشاء الجدول الرابط بينهما نحتاج أن نربطه بهم

في العلاقة فردي:فردي كنا نستخدم الدالة model.hasOne 

بينما في العلاقة فردى:كثير نستخدم model.hasMany من طرف وmodel.balongsTo من طرف أخر

بينما في هذا النوع من العلاقات كثير:كثير نستخدم model.belongsToMany كما في الشفرة بالأدنى

User.belongsToMany(Article, { through: User_Article });
Article.belongsToMany(User, { through: User_Article });

بهذا الشكل قد انشأت علاقة كثير:كثير بين الجدولين, مع مراعاة أن يتم كتابة الجدول الرابط في الخاصية through 

بالإضافة أنه ليس من الإلزامى ان تقم بإنشاء وتعريف الجدول الرابط بنفسك فإن sequelize ستقوم بذلك بالنيابة عنك,ولكن يفضل إنشاؤه بنفسك في حالة اردت التعديل على إحدى الخصائص الإفتراضية أو إضافة أحد الأعمدة

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

  • 0

هذا مثال على علاقة many to many بين User  و Profile.

const User = sequelize.define('user', {
  username: DataTypes.STRING,
  points: DataTypes.INTEGER
}, { timestamps: false });
const Profile = sequelize.define('profile', {
  name: DataTypes.STRING
}, { timestamps: false });

أبسط طريقة لتعريف علاقة many to many هي:

User.belongsToMany(Profile, { through: 'User_Profiles' });
Profile.belongsToMany(User, { through: 'User_Profiles' });

من خلال تمرير string إلى أعلاه نطلب Sequelize لإنشاء نموذج يسمى User_Profiles تلقائيًا مثل الجدول من خلال (المعروف أيضًا باسم جدول الوصلات) مع عمودين فقط معرف المستخدم ومعرف الملف الشخصي سيتم إنشاء مفتاح فريد مركب على هذين العمودين.

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

  • 0

بعد إنشاء كلا الجدولين نقوم بإضافة العلاقة بينهما لكل جدول على حدى وربطهما بجدول الربط مع تحديد اسم الحقل الدال على المفتاح الرئيسي في كلا الجدولين

لنفترض لدينا الجدولين Parent, Child وجدول ربط Parent_Child فيه تقابلات للمفاتيح الرئيسية من كلا الجدولين بإسم parent_id, child_id 

// الجدول الأول
Parent.belongsToMany(
    Child, 
    {
        // اسم جدول الربط
        through: 'Parent_Child',

        // اسم المفتاح الدال على الجدول الحالي في جدول الربط السابق 
        foreignKey: 'parent_id'
    }
)


// بنفس الطريقة نربط الجدول الثاني
Child.belongsToMany(
    Parent, 
    {
        through: 'Parent_Child',
        foreignKey: 'child_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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...