2013-02-26 74 views
1

我創建了一種遊戲,我希望人們能夠建立一個城鎮。
每個用戶只能建立在他們鎮上一個特定的建築物數量有限(即只有2個郵局,1個市政府等)
我與如何實現這個奮鬥。CakePHP:組中的限制數

我有一個UserBuildings表來跟蹤用戶/建築協會,一個建築物表和用戶表。

在那裏我一個建築物添加到我的城市形式,我想先檢查建築物的限制,並從可用的建築列表中忽略它,如果它已經達到了。這是我有什麼:

$buildings = $this->UserBuildings->Buildings->find('list'); 
$currents = $this->UserBuildings->find('all', array(
    'conditions'=> array(
     'UserBuildings.user_id'=>$this->Auth->user('id') 
    ) 
)); 

我可以從$電流數組的限制。

有沒有一種方法,通過查找和查詢中,我可以添加一些條件,我的$建築物列表中刪除與達能的任何條目。顯然,我可以通過for循環運行比較,並通過檢查UserBuildings表中匹配條目的數量來構建更精細的列表,但是有沒有更優雅的方法,可能是使用CakePHP自己的方法?

+0

不是我所試圖做...我試圖刪除從我的結果打破了預先設定的限制值項設置 – 2013-02-26 21:11:19

+0

對不起,我以前的評論,沒有正確讀取的第一部分。我目前沒有直接的答案。您是否考慮過使用計算值(可能使用數據庫視圖)。您可以通過「count()」和user_id,building_type組來計算用戶使用的建築物數量(每種類型)。這將永遠給你一個最新的價值,也如果用戶*刪除*建築物。您可以通過將計算字段定義爲虛擬字段來在模型中包含計算字段; http://book.cakephp.org/2.0/en/models/virtual-fields.html – thaJeztah 2013-02-26 21:38:30

回答

1

簡單地計算一個類型的用戶有多少建築物。通過添加新的建築物,您應該已經知道它是ID和其他數據。

假設這是JA連接表:

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

然後,您可以簡單地用你的極限爲建築物比較計數。順便說一句,所有這些都應該發生在模型中。

+0

我把它建成一個循環,並檢查每個建築物是否有限制構建一個數組。感謝您的輸入。 – 2013-02-27 22:41:01