Использование печатного массива fputcsv вместо значений при использовании Doctrine и Zend Framewrok - PullRequest
0 голосов
/ 06 июня 2011

Привет, я использую Doctrine в качестве ORM для моего Zend App.

Я искал экспорт запроса в CSV-файл, однако получаю следующий вывод

44  Brownie Don't feed after 8pm Array Array

Таким образом, имя питомца и его требования печатаются (вместе с их идентификатором по какой-то причине), но порода и поведение питомца просто печатаются как ARRAY.

Я понимаю, что это связано с запросом, поскольку информация о поведении и породе хранится в их собственном массиве в массиве результатов, но как я могу получить эти значения для экспорта в файл. Я попытался добавить в запрос предложения where, соответствующие типу и поведению домашних животных, к первичным ключам соответствующей таблицы, но это не сработало, поэтому я удалил их.

Код моего действия ниже

 public function todayscatterybookingstofileAction()
  {
    $today=date('y-m-d');
$q = Doctrine_Query::create()
         ->select('p.name,b.breed,h.behaviour,p.special_requirements')
         ->from('PetManager_Model_Pets p')
         ->leftJoin('p.PetManager_Model_Breeds b')
         ->leftJoin('p.PetManager_Model_Behaviour h')
         ->leftJoin('p.PetManager_Model_Catterypets s')
         ->leftJoin('s.PetManager_Model_Catterybooking k')
         ->where('s.bookingID = k.catterybookingID')
         ->andWhere('p.petID=s.pet')
         ->andwhere('k.srtDate < ?',$today) 
         ->andWhere('k.edDate >= ?',$today)
         ->andWhere('k.catteryappointmentstatus=1');
           $result = $q->fetchArray();


 $description="D:/reports/Occupied Catteries";

 $extension=".csv";

 $filename=$description.$today.$extension;

 $file = fopen($filename,"w");      


  foreach($result as $line)
   {

      fputcsv($file,$line);

   }

    fclose($file);
} 

1 Ответ

0 голосов
/ 06 июня 2011

Если вы используете Doctrine 1.1 или выше, вы можете использовать опцию HYDRATE_SCALAR для принудительного создания плоского массива:

$q = Doctrine_Query::create()
         ->select('p.name,b.breed,h.behaviour,p.special_requirements')
         ->from('PetManager_Model_Pets p')
         ->leftJoin('p.PetManager_Model_Breeds b')
         ->leftJoin('p.PetManager_Model_Behaviour h')
         ->leftJoin('p.PetManager_Model_Catterypets s')
         ->leftJoin('s.PetManager_Model_Catterybooking k')
         ->where('s.bookingID = k.catterybookingID')
         ->andWhere('p.petID=s.pet')
         ->andwhere('k.srtDate < ?',$today) 
         ->andWhere('k.edDate >= ?',$today)
         ->andWhere('k.catteryappointmentstatus=1')->setHydrationMode(Doctrine::HYDRATE_SCALAR);

и это должно дать вам плоский список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...