如何修复 Laravel query builder where clause integer variable translated to string
How to fix Laravel query builder where clause integer variable translated to string
我有一个功能可以通过语言编号来获取语言类别记录,用于 API 目的。我使用数据库查询语句 select 类别 table 并加入类别语言 table 以获取类别 id、parent_id 和名称(指定语言)。当执行 return 错误并且 select 底层 SQL 将语言值转换为字符串(例如 languages_id
= 1
)。我 google 很多,不知道哪里出了问题。任何人都可以建议如何解决。非常感谢。
我试图将基础 SQL 复制到 MySQL Workbench 并删除 languages_id
= 1
--> languages_id
= 1 能正常工作。我猜 1
导致了错误。
代码示例:
private function getCategories($language) {
$categories = DB::table('categories')
->select(DB::raw('categories.id, categories.parent_id, categories_translation.name'))
->join('categories_translation', function($join) use ($language) {
$join->on('categories_translation.categories_id', '=', 'categories.id');
$join->on('categories_translation.languages_id', '=', $language);
})
->where([
['parent_id' ,'=', '0'],
['categories.id', '=', $id]
])
->get();
return $categories;
}
错误return 转换后SQL:
"SQLSTATE[42S22]: Column not found: 1054 Unknown column '1' in 'on
clause' (SQL: select categories.id, categories.parent_id,
categories_translation.name from categories
inner join
categories_translation
on categories_translation
.categories_id
=
categories
.id
and categories_translation
.languages_id
= 1
where (parent_id
= 0 and categories
.id
= 1))"
您正在尝试 join
使用与标量值而不是列的比较。我认为您实际上想将该比较作为 "where" 条件,而不是 "join on"
->where([
['parent_id' ,'=', '0'],
['categories.id', '=', $id],
['categories_translation.languages_id', '=', $language]
])
我刚刚通过您的代码发现了另一件事。加入 table 时,您应该使用另一个 table id 字段加入 'categories_translation.languages_id'。就您而言,情况并非如此。您没有使用任何 table 字段加入 'categories_translation.languages_id'。所以理想情况下,你要做的是这个
private function getCategories($language) {
$categories = DB::table('categories')
->select(DB::raw('categories.id, categories.parent_id, categories_translation.name'))
->join('categories_translation', function($join) use ($language) {
$join->on('categories_translation.categories_id', '=', 'categories.id');
})
->where([
['parent_id' ,'=', '0'],
['categories.id', '=', $id]
['categories_translation.languages_id', '=', $language]
])
->get();
return $categories;
}
希望这对您有所帮助
我有一个功能可以通过语言编号来获取语言类别记录,用于 API 目的。我使用数据库查询语句 select 类别 table 并加入类别语言 table 以获取类别 id、parent_id 和名称(指定语言)。当执行 return 错误并且 select 底层 SQL 将语言值转换为字符串(例如 languages_id
= 1
)。我 google 很多,不知道哪里出了问题。任何人都可以建议如何解决。非常感谢。
我试图将基础 SQL 复制到 MySQL Workbench 并删除 languages_id
= 1
--> languages_id
= 1 能正常工作。我猜 1
导致了错误。
代码示例:
private function getCategories($language) {
$categories = DB::table('categories')
->select(DB::raw('categories.id, categories.parent_id, categories_translation.name'))
->join('categories_translation', function($join) use ($language) {
$join->on('categories_translation.categories_id', '=', 'categories.id');
$join->on('categories_translation.languages_id', '=', $language);
})
->where([
['parent_id' ,'=', '0'],
['categories.id', '=', $id]
])
->get();
return $categories;
}
错误return 转换后SQL:
"SQLSTATE[42S22]: Column not found: 1054 Unknown column '1' in 'on clause' (SQL: select categories.id, categories.parent_id, categories_translation.name from
categories
inner joincategories_translation
oncategories_translation
.categories_id
=categories
.id
andcategories_translation
.languages_id
=1
where (parent_id
= 0 andcategories
.id
= 1))"
您正在尝试 join
使用与标量值而不是列的比较。我认为您实际上想将该比较作为 "where" 条件,而不是 "join on"
->where([
['parent_id' ,'=', '0'],
['categories.id', '=', $id],
['categories_translation.languages_id', '=', $language]
])
我刚刚通过您的代码发现了另一件事。加入 table 时,您应该使用另一个 table id 字段加入 'categories_translation.languages_id'。就您而言,情况并非如此。您没有使用任何 table 字段加入 'categories_translation.languages_id'。所以理想情况下,你要做的是这个
private function getCategories($language) {
$categories = DB::table('categories')
->select(DB::raw('categories.id, categories.parent_id, categories_translation.name'))
->join('categories_translation', function($join) use ($language) {
$join->on('categories_translation.categories_id', '=', 'categories.id');
})
->where([
['parent_id' ,'=', '0'],
['categories.id', '=', $id]
['categories_translation.languages_id', '=', $language]
])
->get();
return $categories;
}
希望这对您有所帮助