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 に答える