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