1

我正在创造一种游戏,我希望人们能够建造一座城镇。
每个用户只能在他们的城镇中建造有限数量的特定建筑物(即只有 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 自己的方法?

4

1 回答 1

1

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

假设这是 ja 连接表:

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

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

于 2013-02-26T22:28:49.317 回答