我有一个函数,用于传递语言编号,以获取用于API用途的语言类别记录。我使用数据库查询语句选择类别表,并加入类别语言表以获取类别ID,parent_id和名称(指定语言)。执行返回错误并选择基础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;
}
错误返回转换后的SQL:
“ SQLSTATE [42S22]:找不到列:1054'on中的未知列'1' 子句”(SQL:选择category.id,category.parent_id, 来自
categories
内部联接的Categories_translation.namecategories_translation
上的categories_translation
。categories_id
=categories
。id
和categories_translation
。languages_id
=1
其中(parent_id
= 0和categories
。id
= 1))“
答案 0 :(得分:0)
您正在尝试使用与标量值(而不是列)的比较来join
。我认为您实际上想将该比较作为“ where”条件而不是“ join on”
->where([
['parent_id' ,'=', '0'],
['categories.id', '=', $id],
['categories_translation.languages_id', '=', $language]
])
答案 1 :(得分:0)
我用您的代码发现了另一件事。在连接表时,假设您要将“ categories_translation.languages_id”与另一个表ID字段连接在一起。就您而言,事实并非如此。您没有将“ 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;
}
希望这会有所帮助