通过关系's字段添加where语句构建Laravel查询


Building Laravel query adding where statement by relationship's field

我无法构建简单的Laravel查询。我有translation与类别(translation.category_idcategory.id的外键)。此外,类别还具有is_technical属性。

我需要的是:-获取翻译类别中的所有翻译。Is_technical = 1.

当前我有这个查询:

 $match = ['lang1_code' => $langfrom, 'lang2_code' => $langto];
 $translation = Translation::where($match)->orderByRaw("RAND()")->take(4)->get();

但是这个查询不加入类别(我在我的数据库和我的模型中有关系)。因此,如何加入类别和设置,其中is_Technical = 1?

我相信这是一个基本的问题,但是我是Laravel的新手,我在文档中找不到答案。

你需要whereHas。请参阅Laravel文档了解更多信息http://laravel.com/docs/5.1/eloquent-relationships

这是一个例子,更正你的型号名称。

//Translation.php
public function category() {
    return $this->belongsTo('Category', 'category_id');
}
// query
$translation = Translation::whereHas('category', function($q) {
    $q->where('is_technical', '=', 1);
})->where($match)->orderByRaw("RAND()")->take(4)->get();