如何在Laravel中检索不相关的模型?

时间:2014-01-23 08:54:40

标签: laravel eloquent

我不确定我是否已经很好地提出了这个问题。让我解释一下。

它适用于带有测验的语言应用程序。我想向用户提供4种可能的翻译,但只有一种是正确的。 我找不到一种方法来为错误的答案选择错误的单词。

我的相关数据库表就是那样

Word  
 {id=1}

Lang 
 {id=1, lang = fr}
 {id =2 , lang = en})

WordLang 
 {id=1, word_id=1, lang_id=1, name=chat}   
 {id=2, word_id=1, lang_id=2, name=cat}

我的单词模型就像

模型/ Word.php

public function wordlang()
{
    $this->hasMany('WordLang');
}

public function notword()
{
    return Word::where('id','<>','$id')->orderBy(DB::raw('RAND()'))->first();
}

所以在我看来我有

question: {{$word->wordlang()->where('lang_id','1')->first()->name}}

可能的英文答案:

 - {{$word->wordlang()->where('lang_id','2')->first()->name}}   correct one
 - {{$word->notword()->wordlang()->where('lang_id','2')->first()->name}}
 - {{$word->notword()->wordlang()->where('lang_id','2')->first()->name}}
 - {{$word->notword()->wordlang()->where('lang_id','2')->first()->name}}

这种方法有效,但单词的$ id不会传递给单词类中的notword函数,也不会选择任何单词,包括正确的翻译。

1 个答案:

答案 0 :(得分:0)

好吧,对某些人来说这可能是微不足道的但我却看不到它。

单词模型中的

public function notword($id)

    {
        return Word::where('id','<>',$id)->orderBy(DB::raw('RAND()'))->first();
    }

在视图中

 - {{$word->wordlang()->where('lang_id','2')->first()->name}}   correct one
 - {{$word->notword($word->id)->wordlang()->where('lang_id','2')->first()->name}}
 - {{$word->notword($word->id)->wordlang()->where('lang_id','2')->first()->name}}
 - {{$word->notword($word->id)->wordlang()->where('lang_id','2')->first()->name}}

再次感谢cecilozaur