写Laravel查询 - 相关模型的计数是积极的

时间:2015-11-27 13:29:37

标签: php mysql laravel

无法在Laravel中编写查询。我是Laravel的新手,我不习惯使用Eloquent模型编写查询。

我有两个模型:TranslationCategory。 每个Translation都有一个Category。翻译包含字段lang_from_codelang_to_code。我在DB中定义了FK(这些是在迁移期间自动创建的)。

这花了我一段时间,但最后我定义了这样的模型:

class Translation extends Model
{
    public function category() {
        return $this->belongsTo('App\Category', 'category_id');
    }        
}

class Category extends Model
{
    public function translations() {
        return $this->hasMany('App\Translation');
    }
}

我需要的是编写这样的查询:"从给定列表(非技术性)中获取一个随机类别,其中包含从lang1到lang2"的一个翻译。

查询看起来像这样:

select * from categories c
where c.is_technical = 0 and c.id in (1,2,3,4,5..)
and (select count(*) from translations t where t.category_id = c.id and t.lang_from_code = 'givencode1' and t.lang_to_code = 'givencode2')) > 0

然后将采用随机类别。

我能写的最好是这样的:

$cat = str_split ($cat); //comma seperated category ids
$lang_from = 'lv';
$lang_to = 'en';
$category = Category::where('is_technical', '=', 0)->whereIn('id', $cat)->orderByRaw("RAND()")->first();    

但是,我不知道怎么写"至少有这个类别的翻译"还有"从中添加语言。

1 个答案:

答案 0 :(得分:2)

您可以使用Category::has('translations')

更新以包含特定类型的翻译。您需要根据需要进行修改!

这样的事可能有用:

$category = Category::whereHas('translations', function($query) use ($givencode1, $givencode2) {
                $query->where('lang_from_code', $givencode1)
                      ->where('lang_to_code', $givencode2);
            })
            ->where('is_technical', false)
            ->orderByRaw('RAND()')
            ->first();