2012-03-01 33 views
0

如何在Symfony中爲一個實體使用兩個不同的表格?Symfony中查看量的單獨表格

我有一個實體calles'文章',它代表一篇博客文章。
它包括以下特性:

  • 文章編號
  • 標題
  • 作者
  • 文本
  • 日期
  • 查看

我記得讀一個表緩存有些東西是被破壞的寫給它。這就是爲什麼我想要一個單獨的表,只包含文章ID和視圖的數量。

回答

1

您可以將article_views與article_id作爲FK並訪問計數器。

通過提供文章ID和連接,您可以在每次訪問時通過對等方法在Propel和symfony 1.4中「即時」更新它。

public static function incrementVisits($id, PropelPDO $con = null) 
{ 
    $con = (is_null($con)) 
     ? Propel::getConnection(self::DATABASE_NAME, Propel::CONNECTION_WRITE) 
     : $con; 

    $sql = sprintf('UPDATE %s SET %s = %s + 1 WHERE %s = %d', 
        self::TABLE_NAME, self::VIEWS, self::VIEWS, 
        self::ARTICLE_ID, $id); 

    $stmt = $con->prepare($sql); 
    return $stmt->execute(); 
} 

你可以用該登錄的方法在文章:

public function incrementViews(PropelPDO $con = null) 
{ 
    return ArticleView::incrementVisits($this->getId(), $con); 
} 

然後你就可以實現在文章類似的東西的方法:

public function getViews(PropelPDO $con = null) 
{ 
    return $this->getArticleView($con)->getViews(); 
} 

用於離線另一種可能的解決方案/延遲處理是使用消息排隊系統,並在那裏用每次訪問的文章的ID發送消息。然後在給定的時間間隔內檢索消息並使用類似於上述方法的方法更新表格,但需要添加您希望添加的新訪問的變量。

該選項將使UPDATE查詢加載更可預測,但會引入一些延遲。

希望這會有所幫助。我猜你所指的表緩存是MySQL上SELECT的緩存。