Я использую 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'); }