CakePHP:组中的限制数

CakePHP:组中的限制数,cakephp,Cakephp,我正在创造一种游戏,我希望人们能够建造一座城镇。 每个用户只能在其城镇内建造有限数量的特定建筑物(即,只有2个邮局、1个市政厅等)。 我正在努力实现这一点 我有一个用于跟踪用户/建筑关联的UserBuildings表、一个Buildings表和一个user表 在我为我的城市添加一座建筑的表单上,我想首先检查该建筑的限制,如果已经达到限制,则将其从可用建筑列表中删除。以下是我所拥有的: $buildings = $this->UserBuildings->Buildings->f

我正在创造一种游戏,我希望人们能够建造一座城镇。
每个用户只能在其城镇内建造有限数量的特定建筑物(即,只有2个邮局、1个市政厅等)。
我正在努力实现这一点

我有一个用于跟踪用户/建筑关联的UserBuildings表、一个Buildings表和一个user表

在我为我的城市添加一座建筑的表单上,我想首先检查该建筑的限制,如果已经达到限制,则将其从可用建筑列表中删除。以下是我所拥有的:

$buildings = $this->UserBuildings->Buildings->find('list');
$currents = $this->UserBuildings->find('all', array(
    'conditions'=> array(
        'UserBuildings.user_id'=>$this->Auth->user('id')
    )
));
我可以从$currents数组中获得限制

是否有一种方法,通过查找和查询,我可以向我的$buildings列表添加一些条件,以删除任何已达到容量的条目


显然,我可以通过
for
循环运行比较,并通过检查UserBuildings表中匹配项的数量来构建更精细的列表,但是有没有更优雅的方法,可能使用CakePHP自己的方法呢?

只需计算用户拥有多少类型的建筑即可。通过添加新建筑,您应该已经知道它的id和其他数据

假设这是ja join表:

$count = $this->UserBuildings->find('count', array(
    'conditions'=> array(
        'UserBuildings.building_id'=>$buildingId,
        'UserBuildings.user_id'=>$this->Auth->user('id')
    )
));

然后,您可以简单地将计数与该建筑的限制进行比较。顺便说一句,所有这些都应该发生在一个模型中。

只需计算一个用户拥有多少类型的建筑。通过添加新建筑,您应该已经知道它的id和其他数据

假设这是ja join表:

$count = $this->UserBuildings->find('count', array(
    'conditions'=> array(
        'UserBuildings.building_id'=>$buildingId,
        'UserBuildings.user_id'=>$this->Auth->user('id')
    )
));

然后,您可以简单地将计数与该建筑的限制进行比较。顺便说一句,所有这些都应该发生在一个模型中。

不是我想做的。。。我正试图从我的结果集中删除打破预设限制值的条目。对于我之前的评论,我没有正确阅读第一部分。我现在没有一个直接的答案给你。您是否考虑过使用计算值(可能使用数据库视图)。您可以通过“count()”和按用户id、建筑类型分组来计算用户使用的建筑数量(每种类型)。这将始终为您提供最新的值,如果用户删除了建筑,也会提供最新的值。通过将计算字段定义为virtualField,可以在模型中包含这些字段;不是我想做的。。。我正试图从我的结果集中删除打破预设限制值的条目。对于我之前的评论,我没有正确阅读第一部分。我现在没有一个直接的答案给你。您是否考虑过使用计算值(可能使用数据库视图)。您可以通过“count()”和按用户id、建筑类型分组来计算用户使用的建筑数量(每种类型)。这将始终为您提供最新的值,如果用户删除了建筑,也会提供最新的值。通过将计算字段定义为virtualField,可以在模型中包含这些字段;我将其构建到一个循环中,并根据构建阵列的限制检查每个建筑。谢谢你的输入。我把它构建成了一个循环,并检查了每一个建筑是否有构建阵列的限制。谢谢你的意见。