Laravel 4:多列上的一对多?

时间:2013-12-04 23:51:37

标签: laravel relational-database

我正在创建一个表,它基本上将表中的行映射到另一个表中的行,其结构如下:

|--- Words --|   |- Synonyms -|
|------------|   |------------|
| id         |   | id         |
| en         |   | word_id    |
| ko         |   | synonym_id |
| created_at |   | created_at |
| updated_at |   | updated_at |
|------------|   |------------|

现在,我知道我可以通过以下函数实现words模型有很多Synonyms

public function synonyms()
{
    return $this->hasMany('Synonym');
}

没问题,但这个方法总是由word_id获取,我希望从word_id synonym_id获取它,就像我一样不必在DB中创建多个条目。

反正我能做到吗?

3 个答案:

答案 0 :(得分:0)

检查laravel docs雄辩的关系。它只会得到word_id,因为这是我认为唯一的外键。

为什么你的同义词表中有synonym_id?

答案 1 :(得分:0)

我相信你正在寻找多态关系。

http://laravel.com/docs/eloquent#polymorphic-relations

答案 2 :(得分:-1)

我认为您最好的选择是使用words表作为数据透视表,与synonyms建立多对多关系。

将此添加到您的Word型号。

public function synonyms()
{
    return $this->belongsToMany('Word', 'synonyms', 'user_id', 'synonym_id');
}

使用它:

$word = Word::where('en', '=', 'someword')->first();
foreach($word->synonyms as $synonym) {
    // This method would probably return the same word as a synonym of itself so we can skip that iteration.
    if($synonym->en == $word->en) {
        continue;
    }
    // Echo the synonym.
    echo $synonym->en;
}

我希望能够通过word_idsynonym_id查找同义词,我有点困惑但我认为如果您使用的是多对多,则无关紧要因为如果你知道这个同义词,它在技术上只是一个单词,而且你会做同样的事情。