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

السؤال

نشر

أريد أن أربط بين النموذجين  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
نشر
بتاريخ 14 دقائق مضت قال شرف الدين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
نشر
بتاريخ 25 دقائق مضت قال 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
نشر
بتاريخ 5 ساعات قال شرف الدين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
نشر
بتاريخ 3 ساعات قال 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
نشر
بتاريخ 4 ساعات قال 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
نشر
بتاريخ 9 ساعات قال 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
نشر
بتاريخ منذ ساعة مضت قال Mohamed Lamin Mahmoudi:

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

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

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

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

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

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

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

  • 0
نشر
بتاريخ 21 ساعات قال Wael Aljamal:

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


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

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

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

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

الملف هو Listclass

backend.rar

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...