我正在创建一个表,它基本上将表中的行映射到另一个表中的行,其结构如下:
|--- 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中创建多个条目。
反正我能做到吗?
答案 0 :(得分:0)
检查laravel docs雄辩的关系。它只会得到word_id,因为这是我认为唯一的外键。
为什么你的同义词表中有synonym_id?
答案 1 :(得分:0)
我相信你正在寻找多态关系。
答案 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_id
或synonym_id
查找同义词,我有点困惑但我认为如果您使用的是多对多,则无关紧要因为如果你知道这个同义词,它在技术上只是一个单词,而且你会做同样的事情。