Doctrine_Collection __toString () тип функциональности - PullRequest
0 голосов
/ 13 марта 2012

У кого-нибудь есть идеи о том, как лучше преобразовать коллекцию Doctrine_Collection в CSV на основе определенного имени столбца?

Пример массива:

array
  0 => 
    array
     'id' => string '2' (length=1)
     'name' => string 'metallica' (length=14)
     'created_at' => string '2011-09-02 23:15:15' (length=19)
     'updated_at' => string '2011-10-05 02:51:23' (length=19)
  1 => 
    array
      'id' => string '7' (length=1)
      'name' => string 'coal chamber' (length=13)
      'created_at' => string '2011-09-06 00:24:02' (length=19)
      'updated_at' => string '2011-10-05 02:51:11' (length=19)
  2 => 
    array
      'id' => string '14' (length=2)
      'name' => string 'slayer' (length=14)
      'created_at' => string '2011-10-05 02:48:58' (length=19)
      'updated_at' => string '2011-10-05 02:50:15' (length=19)

Я бы хотел закончить с:

string 'metallica,coal chamber,slayer' (length=29)

Теперь я мог бы легко сделать что-то вроде:

foreach ($this->getBands()->toArray() as $array) {
    $names[] = $array['name'];
}

var_dump(implode(',', $names));

Но я хотел бы посмотреть, есть ли более элегантное решение, использующее встроенные методы, предоставляемые классом Doctrine_Collection.

1 Ответ

0 голосов
/ 15 марта 2012

Закончилось просто написание метода-оболочки для преобразования Doctrine_Collections в CSV на основе определенного столбца:

public static function toString(array $options)
{
    $collection = $options['collection'];
    $columnName = $options['columnName'];
    $separator = (isset($options['separator'])) ? $options['separator'] : ', ';

    foreach ($collection->toArray() as $element) {

        if (isset($element[$columnName])) {
            $columnValues[] = $element[$columnName];
        }
    }

    return (isset($columnValues)) ? implode($separator, $columnValues) : null;
}
...