我有一個Post模型,它具有關聯的評論模型。每條評論都有一個與用戶模型相關的user_id ......所有非常標準的東西。CakePHP - 有效計算相關模型中的獨特屬性
從本質上講,當我對所有感興趣的帖子查找查詢時,我正在尋找一種方法來有效地獲取在每篇帖子上評論過的唯一user_id的數量。
我有一個Post模型,它具有關聯的評論模型。每條評論都有一個與用戶模型相關的user_id ......所有非常標準的東西。CakePHP - 有效計算相關模型中的獨特屬性
從本質上講,當我對所有感興趣的帖子查找查詢時,我正在尋找一種方法來有效地獲取在每篇帖子上評論過的唯一user_id的數量。
您使用過counterCache
嗎?這可能會讓你到達需要的地方。您還需要將它與counterScope
上的某些奇特條件結合使用。這將允許您在記錄保存/更新時保存評論者的數量,而不是在飛行中;導致更快的頁面和更好的用戶體驗。
現在,這本身可能無法讓您達到最終解決方案。考慮使用counterCache/counterScope和virtualFields的組合來提取數據並以此方式進行更新。
我假設張貼的hasMany評論關係,所以查找結果是這個樣子:
$posts = array(
0 => array
(
'Post' => array
(
'id' => 1
, 'Comment' => array
(
0 => array
(
'id' => 1
)
, 1 => array
(
'id' => 2
)
)
)
)
, 1 => array
(
'Post' => array
(
'id' => 2
, 'Comment' => array
(
0 => array
(
'id' => 3
)
)
)
)
, 2 => array
(
'Post' => array
(
'id' => 3
, 'Comment' => array
(
0 => array
(
'id' => 4
)
, 1 => array
(
'id' => 5
)
, 2 => array
(
'id' => 6
)
)
)
));
然後,您可以使用Set class只提取ID是這樣的:
$userIds = Set::extract($posts, '{n}.Post.Comment.{n}.id');
如果有重複,你可以調用array_unique:
$userIds = array_unique($userIds);
這應該這樣做!