【发布时间】:2015-11-27 03:40:08
【问题描述】:
如何在 Laravel ORM 中创建此查询?
SELECT b1.* FROM `buildings` b1 INNER JOIN `buildings` b2 ON b2.`id` IN (SELECT `id` FROM `ingame_buildings`) WHERE b1.`level` > b2.`level`
我尝试在->join()做:
function(){
return implode(',',IngameBuilding::get());
}
但它不起作用。
【问题讨论】:
-
您的原始查询对我来说没有意义。您实际上是在尝试
SELECT * FROM buildings where id IN ( SELECT id FROM ingame_buildings),并且在数据集中,您想比较level列吗? -
@yangqi - 我有两个专栏。第一个 -
buildings包含游戏中可用的所有建筑模板 - 第二个 -ingame_buildings我放置数据的地方,关于当前城市的已建建筑物。我想找到所有可用的升级 - 我在buildings表中有这些数据,因为我有字段id、building_id和level,其中building_id和level是唯一的。我只能在ingame_buildings中拥有building_id,它引用buildings.id字段。 -
感谢您的澄清,据我了解
building_id在buildings和ingame_buildings表中都有,但它们代表不同的含义? -
简单来说,我有建筑:市政厅。这栋楼有3层。所以我在
buildings中有接下来的 3 个字段:(id, building_id, level): (12, 1, 1), (34, 1, 2), (56, 1, 3)- 并且id字段是主键 ofc。玩家建造建筑物的地方,简单来说有市政厅 1 级,ingame_buildings有:(id, building_id, owner_id): (1, 12, 1)但是当基地有 3 级时,我有(1, 56, 1):) -
好的,我知道了。
building_id在两个不同的表中确实令人困惑。建筑物中的那个标识一个唯一的建筑物,但ingame_buildings中的那个是标识buildings中唯一行的外键。看下面的答案,后面我会添加雄辩的查询。
标签: sql laravel orm eloquent laravel-5.1