mysql - Laravel 查询生成器,有问题

标签 mysql database laravel having laravel-query-builder

<分区>

我有一个问题,不知道如何解决。 我需要从选择中获取特定对象,例如 { “iso”:“UA”, “故事”:122, “标题”:乌克兰

所以我有一个sql查询

SELECT
c.iso,
locale.title as title,
(SELECT COUNT(DISTINCT s.id) FROM stories AS s WHERE s.country_id = c.id) AS stories
FROM `countries` AS c
LEFT JOIN countries_locale AS c_l ON c.id=c_l.country_id
LEFT JOIN locales AS locale ON c_l.locale_id=locale.id
WHERE locale.locale = 'en'
GROUP BY c.id
HAVING stories>0

它工作正常,所以我尝试将此查询重写为 Laravel QB:

DB::table($this->getTable())
->select(
'countries.iso as iso',
'locales.title as title',
DB::raw('(SELECT COUNT(s.id) FROM stories AS s WHERE  s.country_id = countries.id) AS stories')
)
->leftJoin('countries_locale', 'countries.id', '=', 'countries_locale.country_id')
->leftJoin('locales', 'countries_locale.locale_id', '=', 'locales.id')
->where('locales.locale', \App::getLocale())
->groupBy('iso')
->having('stories', '>', 0)
->get();

然后我得到一个错误

Syntax error or access violation: 1055 'way.countries.id' isn't in GROUP BY

并向我展示了一个 sql 字符串,我可以在 mysql 中成功执行它

最佳答案

如果你想让 laravel 接受不是很严格的查询,使用

'strict' => false

在数据库配置中。 或者,在您的情况下,您可以将这两列都放在分组依据中的选择中。

关于mysql - Laravel 查询生成器,有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42936206/

相关文章:

php - 创建 php 数据库并显示其内容

Mysql - 选择 1 小时前创建的行

mysql - 按列分组的限制

database - 同步本地和远程 ms access db

Laravel 从嵌套关系中提取一个数组

php - 查看 Laravel 项目公共(public)目录中保存的图像时,Laravel 404 错误

mysql - 如何将 MyISAM 设置为 MySQL 中的默认表处理程序?

database - 在数据库中存储 EXIF 元数据的格式

database - 数据库中的唯一实体

php - Laravel Eloquent Eager Loading 和 ownToMany 太慢