我正在使用Laravel查询构建器编写连接语句,我发现我遇到了一个奇怪的错误。当我从phpmyadmin运行下面的查询时,它可以工作,但是当我尝试访问Laravel中的页面时出现错误。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near
'? where `entities`.`deleted_at` is null' at line 1 (SQL: select * from `entities` inner join
`entity_contact_info` on `entity_contact_info`.`entity_id` = `entities`.`id` and `entities`.`sector_id`
= 2 and `entity_contact_info`.`country_id` IN (select `id` from countries WHERE `region_id` = 9)
where `entities`.`deleted_at` is null)
我在Laravel中构建的查询如下。再次,当我从上面的错误复制查询并运行它时,它的工作原理。似乎没有理由不这样做。
$query = Entity::Join("entity_contact_info", function ($join){
$join->on("entity_contact_info.entity_id", "=", "entities.id")
->where("entities.sector_id", "=", "2")
->where("entity_contact_info.country_id", "IN", "(select `id` from countries WHERE `region_id` = 9)");
})->get();
有什么建议吗?
答案 0 :(得分:0)
我会说问题出在你的第二个where()
声明中。
请尝试以下操作。
->where("entity_contact_info.country_id", "IN", DB::raw("(select `id` from countries WHERE `region_id` = 9)"))
答案 1 :(得分:0)
试试这个,
$query = Entity::Join("entity_contact_info", function ($join){
$join->on("entity_contact_info.entity_id", "=", "entities.id")
->where("entities.sector_id", "=", "2")
->whereIn("entity_contact_info.country_id", DB::raw("(select `id` from countries WHERE `region_id` = 9)"));
})->get();
另一种方式,
$query = Entity::Join("entity_contact_info", function ($join) {
$join->on("entity_contact_info.entity_id", "=", "entities.id")
->where("entities.sector_id", "=", "2")
->whereIn('entity_contact_info.country_id', function($query) {
$query->select('id')
->from('countries')
->where('countries.region_id = 9');
})
})->get();