【问题标题】:Laravel model relation within same table同一张表中的 Laravel 模型关系
【发布时间】:2020-03-13 05:51:25
【问题描述】:

我正在开发一个 Laravel 5.7 项目,其中我有三个表 wordssynonym_wordantonym_word

  • words 表有两列 idword
  • synonym_word 有三列 idword_idsynonym_id
  • antonym_word 有三列 idword_idantonym_id

我将所有单词、它们的同义词和反义词存储在 Words 表中,并在各个表中引用同义词和反义词。

Word.php

class Word extends Model
{
    public function synonyms()
    {
        return $this->hasMany('App\Synonym');
    }

    public function antonyms()
    {
        return $this->hasMany('App\Antonym');
    }
}    

我正在查询这样的同义词:-

$synonyms = Word::find(1)->synonyms;

上述查询给出了Synonym 表中的所有同义词及其ID,但我的实际同义词存储在Words 表中。

如何从Words 表中获取同义词?

【问题讨论】:

  • 请给我看一下你的同义词模型内容。

标签: php mysql laravel-5


【解决方案1】:
$synonymsWithWord = Word::find(1)->synonyms()->with('word')->get();

要使用它,Synonyms 类应该与 Word 定义如下关系。

class Synonym extends Eloquent {

    public function word()
    {
        return $this->belongsTo('App\Word');
    }

}

阅读相同的场景以获得更多理解。 Trying to get a post with comments and user name

【讨论】:

  • 是的,我有这样的同义词和反义词模型。但问题是同义词和反义词表不存储实际单词,实际同义词在单词表中。同义词表只有 word_id 字段引用回词表。
  • $synonymsWithWord = Word::find(1)->synonyms()->with('word');这个查询给了我同义词表中的 word_id,但不是实际的词。我想从 Words 表中获取实际单词。
  • 同义词和反义词模型应该与答案中建议的词模型有关系。然后在Query中使用With函数。
  • @AmandeepSingh 有效吗?或者您面临的任何问题。让我知道。我会解决的。
  • 非常感谢您给我这个想法。我使用嵌套关系解决了它。
【解决方案2】:

我通过在查询中使用点 (.) 解决了它。

Word.php

class Word extends Model
{
    public function antonyms()
    {
        return $this->hasMany(Antonym::class);
    }

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

Synonym.php

class Synonym extends Model
{
    public function word()
    {
        return $this->belongsTo(Word::class);
    }
}

WordController.php

class WordController extends Controller
{
    public function index()
    {
        $words = Word::with(['synonyms.word'])->get();
        return view('words', compact('words') );
    }   
}

注意同义词和单词之间的点 (.)。

words.blade.php

@foreach($words as $word)
    <h4>{{ $word->word }}</h4>
    @foreach($word->synonyms as $s)
        {{ $s->id }} - {{  $s->word->word }}
        <br>
    @endforeach
@endforeach

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2020-09-16
    相关资源
    最近更新 更多