【发布时间】:2015-05-13 02:30:26
【问题描述】:
这是我在 Laravel 中创建复杂查询的最后一次尝试。在这种情况下,我需要 3 个表:photos, events, countries。每个活动都有很多或没有照片,每个国家可能有多个带照片的活动。
我的结果显示
PhotosByCountry, EventsByCountry, rContinent, rCountry.
这里是运行良好的 MySQL 原生查询:
SELECT SUM( allPhotos ) AS PhotosByCountry,
COUNT( temp.Land ) AS EventsByCountry,
rContinent,
temp.Land AS rCountry
FROM (
SELECT e.country AS Land, COUNT( p.id ) AS allPhotos, c.continent AS rContinent
FROM `photos` p
INNER JOIN `events` e ON e.id = p.eventID
INNER JOIN countries c ON e.country = c.country
GROUP BY p.eventID
)temp
GROUP BY rCountry
谁能帮我把它翻译成没有DB::raw() 或whereRaw() 的Laravel Query builder。我构建那个东西的主要问题是子查询。
我得到了所有表的Models:Photo, Country, Sportevent (for table events (= legacy name), couldn't use Event)。
感谢您的努力,如果需要,我很乐意提供更多信息。
加法
表格:
events
id | name | country ... has more columns of course
1 | Eventname 1 | France
2 | Eventname 2 | Switzerland
3 | Eventname 3 | France
photos
id | eventID | path ...
1 | 2 | .....
2 | 1 | .....
3 | 2 | .....
4 | 3 | .....
5 | 3 | .....
6 | 2 | .....
countries
id | country | continent (or geographical Region) ...
1 | France | Europe
2 | Switzerland | Europe
3 | Germany | Europe
4 | United States| North America
5 | Australia | Oceania
6 | .....
Result
PhotosByCountry | EventsByCountry | rContinent | rCountry
3 | 2 | Europe | France
3 | 1 | Europe | Switzerland
【问题讨论】:
-
我认为没有 DB::Raw 是不可能的。在这个 SO question 中,他们提供了一个如何从子选择中进行选择的答案。 stackoverflow.com/questions/24823915/…
-
Laravel 5 有这方面的功能吗?一定是常见问题...
-
这是一篇有趣的文章。考虑到 Eloquent Query Builder 应该让我们的事情变得更容易,那里的有效答案可以做除此之外的所有事情。
-
ORM 只会让查询更容易,因为它是为它构建的。通常这相当于所有查询的 90%(疯狂猜测)。对于更花哨的东西,你总是可以做一个原始查询。我在 Laravel 项目中也使用了它,但我可以通过更改表格设计来使其更容易。
-
你能发布表格吗,也许 2 个简单的查询也可以做到?
标签: mysql laravel laravel-4 eloquent query-builder