3

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"}

EDIT:

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

4
  • What result do you get? Are there any error messages? UTF-8 encoding shouldn't cause any problem. Commented Nov 1, 2014 at 19:18
  • empty page when trying to return the unicode data, I tried return new JsonModel(array('Föderation Islamischer Gemeinschaften LU')); get ["F\u00f6deration Islamischer Gemeinschaften LU"] so maybe the issue is related to database? Commented Nov 1, 2014 at 19:22
  • You mean a completely empty string? No error messages in the log? Commented Nov 1, 2014 at 19:25
  • here is an example of var_dump(result[1]) Array ( [id] => 197 [name] => Föderation Islamischer Gemeinschaften LU [address] => Hauptstrasse 58 [email] => [website] => [phone] => 041 260 90 98 [mobile] => [fax] => [coordinates] => 47.0666986,8.2812254 ) the same return empty result with JsonModel "empty string" Commented Nov 1, 2014 at 19:33

1 Answer 1

5

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"
}
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.