ایجاد رابطه چند به چند

[font="Tahoma"][rtl]سلام دوستان

من این جدول ها رو دارم :[/rtl][/font]




$this->createTable('category', [

 

    'id' => Schema::TYPE_PK,

 

]);

 

 

$this->createTable('question', [

 

    'id' => Schema::TYPE_PK,

 

    'recall' => Schema::TYPE_INTEGER,

 

    'standard' => Schema::TYPE_INTEGER,

 

]);

 

 

$this->createTable('category_relation', [

 

    'id' => Schema::TYPE_PK,

 

    'category_id' => Schema::TYPE_INTEGER,

 

    'post_id' => Schema::TYPE_INTEGER,

 

    'type' => Schema::TYPE_STRING, 

 

]);

 

 

 

$this->addForeignKey('category_ralation_to_category', 'category_relation', 'category_id', 'category', 'id', 'CASCADE', 'CASCADE');

 

$this->addForeignKey('category_relation_to_question', 'category_relation', 'post_id', 'question', 'id', 'CASCADE', 'CASCADE');



[font="Tahoma"][rtl]توی مدل Category هم این رابطه رو ایجاد کردم:

[/rtl][/font]




public function getQuestions(){

 

    return $this->hasMany(Question::className(), ['id' => 'post_id'])

 

            ->viaTable(CategoryRelation::tableName(), ['category_id' => 'id']);

 

}



[font="Tahoma"][rtl]الان اون اطلاعاتی رو که می خوام رو بر می گردونه، مثال :

[/rtl][/font]




Category::findOne(34)->questions



[font="Tahoma"][rtl]حالا چطوری می تونم یه سری شرط بهش اضافه کنم مثل اینکه فقط اون رکورد هایی رو بیار که توی جدول category_relation یه مقدار خاص برای فیلد type هست و اینکه توی جدول question مقدار recall برابر 1 هست

ممنون[/rtl][/font]

[size="4"][right]بهینه ترین راه این است که جدولها را

join

کنید

اگر هر دو شرطی که در سوال گفتی میخوای با هم برقرار باشند

باید

هر سه جدول

join

شوند.[/right][/size]