Reputation: 198
I am having problems getting ZF2 jsonModel to return multi result from doctrine query. The issue appears only when I try to return the array result and not when returning individual items my code is as below:
public function mosquesAction() {
$em = $this
->getServiceLocator()
->get('Doctrine\ORM\EntityManager');
$dql = "select m.name from \Application\Entity\Mosque m ";
$result = $em->createQuery($dql)->getResult();
return new JsonModel($result);
}
the Mosque Entity is:
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/** @ORM\Entity */
class Mosque {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/** @ORM\Column(type="string") */
private $name;
/** @ORM\Column(type="string") */
private $address;
/** @ORM\Column(type="string") */
private $email;
/** @ORM\Column(type="string") */
private $website;
/** @ORM\Column(type="string") */
private $phone;
/** @ORM\Column(type="string") */
private $mobile;
/** @ORM\Column(type="string") */
private $fax;
/** @ORM\Column(type="string") */
private $coordinates;
/** @ORM\ManyToOne(targetEntity="Canton", inversedBy="mosques") */
private $canton;
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
}
when I change the return value to
return new JsonModel($result[0])
I get the result
{"name":"IDTV - Mimar Sinan Camii"}
I think I found the origin of the issue, there is no problem with code I posted but it appears that JsonModel can't handle special characters like in
Islamische König Faysal Stiftung
So my question now is, how to encode these characters in JsonModel on php5.3?
Thank you in advance and sorry for my poor English
Upvotes: 3
Views: 1102
Reputation: 198
After playing with different options I got to the result that the issue resides in doctrine connection to MySQL database, So I changed my database collation to _utf8_general_i_ and added some parameters to the driver params:
'charset' => 'utf8',
'driverOptions' => array(
1002 => 'SET NAMES utf8'
)
now I get the result I was expecting
{
"id": 2,
"name": "Föderation Islamischer Gemeinschaften LU",
"address": "Hauptstrasse 58",
"email": "",
"website": "",
"phone": "041 260 90 98",
"mobile": "",
"fax": "",
"coordinates": "47.0666986,8.2812254"
}
Upvotes: 5