0

I have 2 methods, that are pretty much exactly the same and I'd likie someone to help me refactor them:

public static function searchFromVideoRequest($word, $returnPropelObjects = false)
{
    $c = new Criteria();
    $c->addJoin(YoutubeVideoPeer::ID,ItemPeer::YOUTUBE_VIDEO_ID);
    $c->addSelectColumn(self::TITLE);
    $c->addSelectColumn(self::ID);
    $c->add(ItemPeer::TITLE, '%'.$word.'%', Criteria::LIKE);
    $c->addAnd(self::YOUTUBE_VIDEO_ID, null, Criteria::ISNOTNULL);
$c->addAscendingOrderByColumn(self::TITLE);
   if ($returnPropelObjects)
          return self::doSelect($c);

        $stmt = self::doSelectStmt($c);
        $results = array();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
          $results[] = $row;
        }
        return $results;
}

public static function searchFromFlickrRequest($word, $returnPropelObjects = false)
{
    $c = new Criteria();
    $c->addJoin(FlickrPhotoPeer::ID,ItemPeer::FLICKR_PHOTO_ID);
    $c->addSelectColumn(self::TITLE);
    $c->addSelectColumn(self::ID);
    $c->add(ItemPeer::TITLE, '%'.$word.'%', Criteria::LIKE);
    $c->addAnd(self::FLICKR_PHOTO_ID, null, Criteria::ISNOTNULL);
    $c->addAscendingOrderByColumn(self::TITLE);
   if ($returnPropelObjects)
          return self::doSelect($c);

        $stmt = self::doSelectStmt($c);
        $results = array();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
          $results[] = $row;
        }
        return $results;
}

Thanks

4
  • 3
    You mean: you want someone to refactor them for you. Or do you have any specific problem with your attempt at refactoring? If so, show us your attempt and describe in which way it does not work. Commented Mar 25, 2011 at 15:39
  • 1
    And you can't do this yourself because? Commented Mar 25, 2011 at 15:40
  • 1
    codereview.stackexchange.com Commented Mar 25, 2011 at 15:44
  • I've tried to replace the ` if ($returnPropelObjects) return self::doSelect($c); $stmt = self::doSelectStmt($c); $results = array(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $results[] = $row; } return $results; } ` into another method and simply call that in both functions, but that hasn't worked Commented Mar 25, 2011 at 15:50

1 Answer 1

1

To refactor such methods you can split up them into a few methods that will contain common code and make them private, so no one can use them outside the class:

public static function searchFromVideoRequest($word, $returnPropelObjects = false)
{
    $c = self::buildSearchCriteria($word);
    $c->addJoin(YoutubeVideoPeer::ID,ItemPeer::YOUTUBE_VIDEO_ID);
    $c->addAnd(self::YOUTUBE_VIDEO_ID, null, Criteria::ISNOTNULL);
    return self::getSearchResult($c, $returnPropelObjects);
}

public static function searchFromFlickrRequest($word, $returnPropelObjects = false)
{
    $c = self::buildSearchCriteria($word);
    $c->addJoin(FlickrPhotoPeer::ID,ItemPeer::FLICKR_PHOTO_ID);
    $c->addAnd(self::FLICKR_PHOTO_ID, null, Criteria::ISNOTNULL);
    return self::getSearchResult($c, $returnPropelObjects);
}

private static function buildSearchCriteria($word)
{
    $c = new Criteria();
    $c->addSelectColumn(self::TITLE);
    $c->addSelectColumn(self::ID);
    $c->add(ItemPeer::TITLE, '%'.$word.'%', Criteria::LIKE);
    $c->addAscendingOrderByColumn(self::TITLE);
    return $c;
}

private static function getSearchResult($c, $returnPropelObjects)
{
    if ($returnPropelObjects)
      return self::doSelect($c);

    $stmt = self::doSelectStmt($c);
    $results = array();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
      $results[] = $row;
    }
    return $results;
}

PS: And I think the question is OK.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.