2012-05-15 39 views
0

这是一个完全新手的问题,请耐心等待。我从在线的Jobeet和Askeet教程学习symfony,但是我的大多数黑客都参与了教义,所以我对Propel并不熟悉。到目前为止,我已经通过在线研究和修改来满足我的需求,但我需要一些帮助。进入学说代码片段

有人能帮我翻译这些代码片段到Doctrine吗?

public function setTag($v) 
{ 
    parent::setTag($v); 

    $this->setNormalizedTag(Tag::normalize($v)); 
} 
public function getTags() 
{ 
    $c = new Criteria(); 
    $c->clearSelectColumns(); 
    $c->addSelectColumn(QuestionTagPeer::NORMALIZED_TAG); 
    $c->add(QuestionTagPeer::QUESTION_ID, $this->getId()); 
    $c->setDistinct(); 
    $c->addAscendingOrderByColumn(QuestionTagPeer::NORMALIZED_TAG); 

    $tags = array(); 
    $rs = QuestionTagPeer::doSelectRS($c); 
    while ($rs->next()) 
    { 
    $tags[] = $rs->getString(1); 
    } 

    return $tags; 
} 
public function getPopularTags($max = 5) 
{ 
    $tags = array(); 

    $con = Propel::getConnection(); 
    $query = ' 
    SELECT %s AS tag, COUNT(%s) AS count 
    FROM %s 
    WHERE %s = ? 
    GROUP BY %s 
    ORDER BY count DESC 
    '; 

    $query = sprintf($query, 
    QuestionTagPeer::NORMALIZED_TAG, 
    QuestionTagPeer::NORMALIZED_TAG, 
    QuestionTagPeer::TABLE_NAME, 
    QuestionTagPeer::QUESTION_ID, 
    QuestionTagPeer::NORMALIZED_TAG 
); 

    $stmt = $con->prepareStatement($query); 
    $stmt->setInt(1, $this->getId()); 
    $stmt->setLimit($max); 
    $rs = $stmt->executeQuery(); 
    while ($rs->next()) 
    { 
    $tags[$rs->getString('tag')] = $rs->getInt('count'); 
    } 

    return $tags; 
} 
public static function getTagsForUserLike($user_id, $tag, $max = 10) 
{ 
    $tags = array(); 

    $con = Propel::getConnection(); 
    $query = ' 
    SELECT DISTINCT %s AS tag 
    FROM %s 
    WHERE %s = ? AND %s LIKE ? 
    ORDER BY %s 
    '; 

    $query = sprintf($query, 
    QuestionTagPeer::TAG, 
    QuestionTagPeer::TABLE_NAME, 
    QuestionTagPeer::USER_ID, 
    QuestionTagPeer::TAG, 
    QuestionTagPeer::TAG 
); 

    $stmt = $con->prepareStatement($query); 
    $stmt->setInt(1, $user_id); 
    $stmt->setString(2, $tag.'%'); 
    $stmt->setLimit($max); 
    $rs = $stmt->executeQuery(); 
    while ($rs->next()) 
    { 
    $tags[] = $rs->getString('tag'); 
    } 

    return $tags; 
} 
+0

从哪里得到这段代码? – j0k

+0

http://www.symfony-project.org/askeet/1_0/en/13 –

回答

0

我建议你忘记Askeet系列教程,这是1.0版本,并且因为这个版本很多事情的变化。

但是,你可以找到一个svn dump Askeet的教条版本。你应该使用SVN重建回购(不知道如何执行)。另一方面,如果您需要处理sf1.4项目中的标签,我建议您使用插件sfDoctrineActAsTaggablePlugin

+0

感谢svn提示。不知道它存在。我目前在另一个项目上安装了sfDoctrineActAsTaggable。这似乎是一个非常有力的插件。它在我的方案中创建了2个表格:标记和标记。它们都不引用提交标签的用户。从概念上讲,它有多重要,将标签条目归属于用户并将该关系保存在数据库中? –

+0

它有多重要?这真的取决于你的项目。我有一个使用标签,我不需要知道谁添加标签。但是如果你想添加这个功能,你将不得不重写/扩展当前插件。 – j0k