无法在Laravel中编写查询。我是Laravel的新手,我不习惯使用Eloquent模型编写查询。
我有两个模型:Translation
和Category
。
每个Translation
都有一个Category
。翻译包含字段lang_from_code
和lang_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();
但是,我不知道怎么写"至少有这个类别的翻译"还有"从中添加语言。
答案 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();