Насочване към кодови фрагменти на ученията

Това е съвсем нов въпрос, така че моля, имайте търпение. Уча symfony от онлайн уроците на Jobeet и Askeet, но повечето от моите хакове включват Doctrine, така че изобщо не съм запознат с 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;
}

person Martin Fall    schedule 15.05.2012    source източник
comment
откъде взе този код?   -  person j0k    schedule 15.05.2012
comment
symfony-project.org/askeet/1_0/en/13   -  person Martin Fall    schedule 15.05.2012


Отговори (1)


Препоръчвам ви да забравите урока за Askeet, той е за изданието 1.0 и много неща са се променили след тази версия.

Но можете да намерите svn dump на доктринна версия на Askeet . Трябва да използвате SVN, за да възстановите репото (не знам как да изпълня това).

От друга страна, ако трябва да обработвате етикет в проект sf1.4, препоръчвам ви да използвате приставката sfDoctrineActAsTaggablePlugin.

person j0k    schedule 15.05.2012
comment
Благодаря за съвета за svn. Не знаех, че съществува. В момента имам инсталиран sfDoctrineActAsTaggable на друг проект. Изглежда като много мощен плъгин. Той създаде 2 таблици в моята схема: tag & tagged. Нито един от тях не препраща към потребителя, който е изпратил маркера. Колко важно е, концептуално казано, да се приписват записи на етикети на потребителя и да се запазва тази връзка в базата данни? - person Martin Fall; 15.05.2012
comment
Колко важно е? Това наистина зависи от вашия проект. Имам един използващ етикет и не е нужно да знам кой е добавил етикет. Но ако искате да добавите тази функция, ще трябва да пренапишете/разширите текущия плъгин. - person j0k; 15.05.2012