2012-03-01 30 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的缓存。