От многих до многих отношений с таксономией в «Красноречии»

Я использую Laravel 4. У меня есть много разных отношений в моей системе. И я предпочитаю использовать схему таблиц таксономии WordPress.

Но как я могу установить отношения моделей с Laravel 4 Eloquent ORM? Вот мои таблицы базы данных;

Табличные terms :

 +------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+---------+----------------+ | term_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(200) | NO | MUL | | | | slug | varchar(200) | NO | UNI | | | +------------+---------------------+------+-----+---------+----------------+ 

Таблица term_taxonomy :

 +------------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------------------+------+-----+---------+----------------+ | term_taxonomy_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | term_id | bigint(20) unsigned | NO | MUL | 0 | | | taxonomy | varchar(32) | NO | MUL | | | | description | longtext | NO | | NULL | | | parent | bigint(20) unsigned | NO | | 0 | | | count | bigint(20) | NO | | 0 | | +------------------+---------------------+------+-----+---------+----------------+ 

Таблица term_relationships :

 +------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------------------+------+-----+---------+-------+ | object_id | bigint(20) unsigned | NO | PRI | 0 | | | term_taxonomy_id | bigint(20) unsigned | NO | PRI | 0 | | | term_order | int(11) | NO | | 0 | | +------------------+---------------------+------+-----+---------+-------+ 

Обычно мы можем return $this->belongsToMany('Term'); но как мы можем сделать 2 отношения? Нам нужны 2 отношения, которые сначала находят терминологию таксономии из таблицы «term_taxonomy», после нахождения термина «taxonomy_id».

И пример того, как я хочу использовать;

 $categories = Post::find(1)->categories; // get terms with taxonomy="post_category" $tags = Post::find(1)->tags; // get terms with taxonomy="post_tag" 

Я не хочу делать это с базовым классом базы данных « DB::table('table')->join('...')... « Я хочу использовать методы и модели отношений с Eloquent.

Вы можете создать методы getter для их обработки:

В своей модели Post создайте новые методы:

 public function getCategories() { return $this->hasMany()->where('taxonomy', 'post_category'); } public function getTags() { return $this->hasMany()->where('taxonomy', 'post_tag'); }