2009-12-19 14 views
11

में कनवर्ट करने के लिए मैं डॉक्ट्रिन 1.2 का उपयोग कर रहा हूं, मैं क्वेरी ऑब्जेक्ट को जेसन/सरणी प्रारूप में कैसे प्राप्त कर सकता हूं?डॉक्ट्रिन ऑब्जेक्ट को जेसन

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

दूसरी प्रतिक्रिया बहुत अच्छी है। [http: // stackoverflow।com/प्रश्न/6706485/कैसे करने वाली एनकोड-सिद्धांत-संस्थाओं करने वाली json-इन-सिम्फोनी-2-0-ajax आवेदन] [1] [1]: http: // stackoverflow .com/प्रश्न/6706485/कैसे-टू-एन्कोड-सिद्धांत-संस्थाएं-टू-जेसन-इन-सिम्फनी-2-0-AJAX-application – csadan

उत्तर

27

एक समाधान $user वस्तु पर toArray() विधि का उपयोग करने के लिए, केवल डेटा आप में रुचि रखते युक्त एक सरल सारणी रखने के लिए, और, फिर, json_encode का उपयोग JSON स्ट्रिंग के लिए है कि PHP सरणी परिवर्तित करने के लिए हो सकता है।

इस तरह, मुझे लगता है:

$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); 

(परीक्षण किया है, लेकिन यह काम से बहुत दूर नहीं होना चाहिए ...)

+1

इस तरह मैं इसे करता हूं। – Sam

+1

यह उत्तर स्वीकार्य के रूप में चिह्नित किया जाना चाहिए !!! – hossaindoula

+4

क्या यह संबंधों को संभालता है? –

1
$users2 = Doctrine_Query::create() 
->select('u.id, u.username, u.firstname, u.lastname') 
->from('User u') 
->orderby('u.id'); 
$tmp2 = $users2->fetchArray(); 

मैं पता नहीं क्यों toArray() तालिका में अन्य फ़ील्ड देगा, उदा। इसमें "पासवर्ड" फ़ील्ड होगा, ऐसा लगता है कि fetchArray() मुझे क्वेरी में सही फ़ील्ड दे सकता है।

toArray()

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

fetchArray()

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

toArray ऑब्जेक्ट का सरणी प्रारूप में प्रत्यक्ष परिवर्तन है। fetchArray इस अर्थ में थोड़ा अधिक चालाक है कि यह वास्तव में एक परिवर्तन नहीं है, लेकिन एक निष्कर्षण अधिक है। – Oddman

6

साथ $ रिकार्ड> exportTo मुसीबत ('जेसन') यह है कि यह सभी रिकॉर्ड फ़ील्ड निर्यात करेगा। और ज्यादातर मामलों में यह एक वांछनीय व्यवहार नहीं है (उदाहरण के लिए जब जेसन का यह टुकड़ा ब्राउज़र पर पास किया जाना चाहिए)।

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

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

$ user_json तो कुछ इस तरह होगा: निर्यात के दायरे को सीमित करने का एक तरीका है DQL में फ़ील्ड चुनते हैं निर्दिष्ट करने के लिए है

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

तो यह खुलासा नहीं करता "पासवर्ड" फ़ील्ड मान लेकिन अंतर्निहित डेटाबेस संरचना का पर्दाफाश करता है। फिर, हम जो चाहते हैं वह नहीं हो सकता है।

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

अब Doctrine ORM Transformations बाहर है, यह करने की अनुमति देता मुझे क्या DQL में फ़ील्ड को निर्दिष्ट चयन + सरणी तो json एनकोड के रूप में लाने है इकाइयों को स्केलर सरणी में परिवर्तित करें और पीछे

class User implements ITransformable { 
    use Transformable; 
// ... 
echo json_encode($user->toArray()); 
+0

यह सिर्फ एक उत्तर के रूप में एक लिंक है! –