php - Laravel Eloquent Model 相关查询未按预期工作
问题描述
我有两张桌子。codes
和translations
。
代码表
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%'
解决方案
您正在使用 with 所以它返回第一个表,就像左连接一样。如果你想获得内部连接,你应该这样做:
$codes = Codes::whereHas('translation', function ($join) {
return $join->where('copy', 'like', '%hltad la loq%');
})->get();
推荐阅读
- python - 如何添加包含斜杠的动态 URL 部分
- mysql - MySql - 选择数据长度小于 N 长度的列
- c++ - 如何静态构建项目以删除 vcruntime140.dll 依赖项?
- android - 工具栏和片段背景如何使用一种渐变颜色android kotlin
- c# - 使用触发器启用 TextBox
- npm - NPM 脚本 - 在哪里保存本地项目的自定义脚本?
- windows - FOR 命令的奇怪行为,其中包含看似无害的空间。解释?
- redis - 芹菜工人正在运行,但突然节点不再回复
- sql-server - 当我尝试将字符串列转换为浮点列时出错
- c# - 如何对数据库更改执行集线器方法