2012-05-15 38 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