首页 > 解决方案 > Laravel Eloquent Model 相关查询未按预期工作

问题描述

我有两张桌子。codestranslations

代码表

id | name
---|------
1  | A99

翻译表

id | code_id | language_code | copy
---|---------|---------------|------
1  |1        |en             | Heart Disease
2  |1        |fr             | Sning Nat

代码模型

class Code
{
  function translation() // for default lanuage
  {
   return $this->hasOne(Translation::class, 'code_id')->where('language_code', 'en);
  }
}

询问

$codes = Codes::with(['translation' => function($query){
 $query->where('copy', 'like', '%hltad la loq%');
}]);

这应该不返回任何内容,但它会返回所有代码而不进行翻译。

换句话说,我只想在幕后进行这个查询。

select codes.*, translations.copy from codes
inner join translations ON codes.id = translations.code_id
where translations.language_code='en'
and translations.copy like '%hltad la loq%'

标签: phplaraveleloquent

解决方案


您正在使用 with 所以它返回第一个表,就像左连接一样。如果你想获得内部连接,你应该这样做:

$codes = Codes::whereHas('translation', function ($join) {
    return $join->where('copy', 'like', '%hltad la loq%');
})->get();

推荐阅读