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

السؤال

نشر

أريد أن أربط بين النموذجين  Room و User بعلاقة many to many كيف يتم ذلك ؟

room.js

const room =(sequelize,DataTypes)=>{
    const Room =sequelize.define('room',{
     Numberofroom:{
         type:DataTypes.STRING,
     },
    NameOfroom:{
        type:DataTypes.STRING,
    },
    QrCodevalue:{
        type:DataTypes.STRING,
        unique:true,
    },
    date:{
        type:DataTypes.DATE,
    }
    
    });
    return Room;
    
    
    
    }
    
    
    export default room;

user.js

import Sequelize from 'sequelize';

const user =(sequelize,DataTypes)=>{
  const User =sequelize.define('user',{
   name:{
       type:DataTypes.STRING,
   } ,
   email:{
       type:DataTypes.STRING,
       unique:true,
   },
  password:{
      type:DataTypes.STRING,
  },
  userType:{
      type:DataTypes.ENUM('teacher','student')
  }
  

  });
  //نربط هذا النموذج بالنموذج بروفايل 
  User.associate=models=>{
User.hasOne(models.Profile);
  }
  return User ;

}
 
export default user;

index.js

import Sequelize from 'sequelize';


const sequelize = new Sequelize(

    process.env.DB,
    process.env.DB_User,
    process.env.DB_pass,
    {
        dialect:'postgres'
    }
);
const models={
    User:sequelize.import('./user'),
    Profile:sequelize.import('./profile'),
    Room:sequelize.import('./room')

}
Object.keys(models).forEach(key=>{
if('associate'in models[key]){
    models[key].associate(models);
}

});


sequelize.authenticate()
.then(()=>{
    console.log('connection  has been estbileshed succsefully');
})
.catch(err=>{
    console.log('Unabel to connect to the data base');
});

export {sequelize};
export default models;
 

 

Recommended Posts

  • 0
نشر

في sequelize يمكننا عمل علاقة من نوع many-to-many عبر إستخدام الدالة belongsToMany لدى كلا الطرفين, كما يتضح من الشفرة التالية في دالة associate 

User.associate=models=>{
	User.hasOne(models.Profile);
	User.belongsToMany(models.Room)
  }
Room.associate = models=>{
	Room.belongsToMany(models.User)
}

 

  • 0
نشر
  بتاريخ On 3‏/6‏/2022 at 10:46 قال شرف الدين2:

في sequelize يمكننا عمل علاقة من نوع many-to-many عبر إستخدام الدالة belongsToMany لدى كلا الطرفين, كما يتضح من الشفرة التالية في دالة associate 

User.associate=models=>{
	User.hasOne(models.Profile);
	User.belongsToMany(models.Room)
  }
Room.associate = models=>{
	Room.belongsToMany(models.User)
}

 

أظهر المزيد  

أنا أريد من خلال هاته العلاقة أن يتم إنشاء جدول ثالث أدخل فيه إسم ورقم المستخدم من نموذج المستخدمين وإسم الحصة من نموذد الحصص كما في الصورة هل هاته الطريقة تفي بالغرض؟

room.PNG

  • 0
نشر
  بتاريخ On 3‏/6‏/2022 at 11:02 قال Mohamed Lamin Mahmoudi:

أنا أريد من خلال هاته العلاقة أن يتم إنشاء جدول ثالث أدخل فيه إسم ورقم المستخدم من نموذج المستخدمين وإسم الحصة من نموذد الحصص كما في الصورة هل هاته الطريقة تفي بالغرض؟

 

أظهر المزيد  

أجل ويمكنك تحديد إسم الجدول الثالث عبر الخاصية  through كما يظهر من الشفرة التالية 

User.associate=models=>{
User.hasOne(models.Profile);
User.belongsToMany(models.Room,{through:"name of third table"}) }
Room.associate = models=>{
  Room.belongsToMany(models.User,{through:'name of third table'})
}

 

  • 0
نشر
  بتاريخ On 3‏/6‏/2022 at 11:30 قال شرف الدين2:

أجل ويمكنك تحديد إسم الجدول الثالث عبر الخاصية  through كما يظهر من الشفرة التالية 

User.associate=models=>{
User.hasOne(models.Profile);
User.belongsToMany(models.Room,{through:"name of third table"}) }
Room.associate = models=>{
  Room.belongsToMany(models.User,{through:'name of third table'})
}

 

أظهر المزيد  

و كيف أحدد خواص هذا الجدول ؟

  • 0
نشر
  بتاريخ On 3‏/6‏/2022 at 17:01 قال Mohamed Lamin Mahmoudi:

و كيف أحدد خواص هذا الجدول ؟

أظهر المزيد  

حاولت أن أضع خواص للجدول الثالث الذي أنشأته 

import Sequelize from 'sequelize';
const listRoom = Sequelize.define('ListRoom',{
    numberofRoom:{
        type:DataTypes.INTEGER,
       },
      NameUser :{
           type:DataTypes.STRING,
       },
     NumberUser:{
         type:DataTypes.INTEGER
     }
}    
);

export default listRoom;
Room.associate = models=>{
        Room.belongsToMany(models.User,{through:'ListRoom'})
      }
    return Room;
    
User.associate=models=>{
  User.hasOne(models.Profile);
  User.belongsToMany(models.Room,{through:"ListRoom"}) }
  return User ;

هذا ماظهر لي 

Capture.PNG

  • 0
نشر
  بتاريخ On 3‏/6‏/2022 at 20:16 قال Mohamed Lamin Mahmoudi:

هذا ماظهر لي 

أظهر المزيد  

سبب الخطأ هو عدم تضمين صنف الخواص DataTypes من مكتبة sequelize

const { DataTypes , sequelize } = require("sequelize"); 

DataTypes.INTEGER  هنا تصبح تعمل

ربما تختلف حسب إصدار المكتبة لديك.

يمكنك تعريف الجدول الوسيط من خلال نموذج مثل أي نموذج آخر.. ويتم الربط من خلال تمريراسم النموذج للنماذج المرتبطة به من خلال through وتأكد من تطابق الأسماء

مثلاً في المباراة أكثر من فريق، وكل فريق يلعب أكثر من مباراة تكون العلاقة:

const GameTeam = sequelize.define('GameTeam', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
  }
});
Team.belongsToMany(Game, { through: GameTeam });
Game.belongsToMany(Team, { through: GameTeam });
  • 0
نشر
  بتاريخ On 4‏/6‏/2022 at 00:54 قال Wael Aljamal:

سبب الخطأ هو عدم تضمين صنف الخواص DataTypes من مكتبة sequelize

const { DataTypes , sequelize } = require("sequelize"); 

DataTypes.INTEGER  هنا تصبح تعمل

ربما تختلف حسب إصدار المكتبة لديك.

يمكنك تعريف الجدول الوسيط من خلال نموذج مثل أي نموذج آخر.. ويتم الربط من خلال تمريراسم النموذج للنماذج المرتبطة به من خلال through وتأكد من تطابق الأسماء

مثلاً في المباراة أكثر من فريق، وكل فريق يلعب أكثر من مباراة تكون العلاقة:

const GameTeam = sequelize.define('GameTeam', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
  }
});
Team.belongsToMany(Game, { through: GameTeam });
Game.belongsToMany(Team, { through: GameTeam });
أظهر المزيد  

يعني في هذه الحالة الجدول الثالث يحتوي فقط على خاصيتين مثلا إسم الفريق والمباراة التي لعبها فقط 

* في حالتي عندي الطالب ممكن أن يسجل في أكثر من حصة والحصة ممكن أن يكون فيها أكثر من طالب 

أنا أريد أن أجلب كل الطلبة الذين ينتمون لحصة ما مثلا حصة الرياضيات فيها طالبين أريد أن أعرض إسم الحصة مع الطالبين الذين ينتمون إليها كما في الصورة أعلاه  ؟

 

  • 0
نشر
  بتاريخ On 4‏/6‏/2022 at 10:06 قال Mohamed Lamin Mahmoudi:

يعني في هذه الحالة الجدول الثالث يحتوي فقط على خاصيتين مثلا إسم الفريق والمباراة التي لعبها فقط 

* في حالتي عندي الطالب ممكن أن يسجل في أكثر من حصة والحصة ممكن أن يكون فيها أكثر من طالب 

أنا أريد أن أجلب كل الطلبة الذين ينتمون لحصة ما مثلا حصة الرياضيات فيها طالبين أريد أن أعرض إسم الحصة مع الطالبين الذين ينتمون إليها كما في الصورة أعلاه  ؟

أظهر المزيد  

في علاقة الكثير لكثير، كل سجل أو وثيقة تحوي ثنائية أو أكثر من الخواص

GameTeam   team_1_id team_2_id   date score .. 
   1          1          2           
   2          2          3 
   3          2          3

لاحظ أن لكل مباراة معلوماتها الكاملة، من الفرق المشاركة و التاريخ و النتيجة ..

أي سطر في الجدول يعبر عن مباراة

  • 0
نشر
  بتاريخ On 4‏/6‏/2022 at 11:19 قال Wael Aljamal:

في علاقة الكثير لكثير، كل سجل أو وثيقة تحوي ثنائية أو أكثر من الخواص

GameTeam   team_1_id team_2_id   date score .. 
   1          1          2           
   2          2          3 
   3          2          3

لاحظ أن لكل مباراة معلوماتها الكاملة، من الفرق المشاركة و التاريخ و النتيجة ..

أي سطر في الجدول يعبر عن مباراة

أظهر المزيد  

حاولت الربط لكن لم يظهر لي الجدول في قاعدة البيانات ؟؟ 

الملف هو Listclass

backend.rar

  • 0
نشر
  بتاريخ On 5‏/6‏/2022 at 08:49 قال Mohamed Lamin Mahmoudi:

حاولت الربط لكن لم يظهر لي الجدول في قاعدة البيانات ؟؟ 

الملف هو Listclass

backend.rarFetching info...

أظهر المزيد  

كنت تربط العلاقات في النماذج الخطأ. ولا تقوم بتصدير النموذج

index.js

ListClass.js

profile.js

room.js

User.js

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...