سؤال

أنا أستخدم Doctrine 1.2، كيف يمكنني تحويل كائن الاستعلام إلى تنسيق json/ray؟

$user = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id')
->execute();
هل كانت مفيدة؟

المحلول

وربما يكون الحل هو استخدام في toArray() الأسلوب على الكائن $user، لدينا مجموعة بسيطة تحتوي على البيانات فقط كنت مهتما، و، ثم، واستخدام <لأ href =" http://php.net/json_encode "يختلط =" noreferrer "> json_encode لتحويل هذه PHP مجموعة إلى سلسلة JSON.

وشيء من هذا القبيل، وأنا أفترض:

$user = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id')
->execute();

$userArray = $user->toArray();
$json = json_encode($userArray);

(وليس اختبار، ولكن لا ينبغي أن يكون بعيدا عن العمل ...)

نصائح أخرى

مشكلة مع $سجل->تصدير إلى('json') هو أنها سوف تصدير الجميع حقول السجل.وفي معظم الحالات لا يكون هذا سلوكًا مرغوبًا (على سبيل المثال.عندما يجب تمرير هذه القطعة من json إلى المتصفح).إحدى الطرق للحد من نطاق التصدير هي تحديد الحقول في DQL حدد:

$user = Doctrine_Query::create()
            ->select('u.id, u.name')
            ->from('User u')
            ->addWhere('u.id = ?', $id)
            ->fetchOne();

$user_json = $user->exportTo('json');

سيكون $user_json بعد ذلك شيئًا مثل هذا:

{
    "id": 123,
    "name": "John Smith",
    "password": null,
    "deleted": null
}

لذلك لا يعرض قيمة حقل "كلمة المرور" ولكن يفعل كشف بنية قاعدة البيانات الأساسية.مرة أخرى، قد لا يكون ما نريده.ما أفعله هو تحديد الحقول في DQL حدد + جلب كمصفوفة ثم تشفير json:

$user = Doctrine_Query::create()
            ->select('u.id, u.name')
            ->from('User u')
            ->addWhere('u.id = ?', $id)
            ->fetchOne(array(), Doctrine::HYDRATE_ARRAY);

$user_json = json_encode($user);

في هذه الحالة سيبدو json كما يلي:

{
  "id": 123,
  "name": "John Smith"
}
$users2 = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id');
$tmp2 = $users2->fetchArray();

لا أعرف لماذا لمجموعة() سيعطي الحقل الآخر في الجدول ، على سبيل المثاليبدو أنه يحتوي على حقل "كلمة المرور" fetchArray() يمكن أن تعطيني الحقول الصحيحة في الاستعلام.

لمجموعة()

Array
(
    [0] => Array
        (
            [id] => 1
            [username] => user1
            [password] => password
            [firstname] => John
            [lastname] => Smith
        )

جلب الصفيف ()

Array
(
    [0] => Array
        (
            [id] => 1
            [username] => user1
            [firstname] => John
            [lastname] => Smith
        )

لJSON:

$user->exportTo('json');

و؛ -)

عقيدة ORM التحولات هو خارج، فإنه يسمح لتحويل الكيانات المصفوفات العددية ويعود

class User implements ITransformable {
    use Transformable;
// ...
echo json_encode($user->toArray());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top