2012-12-17 30 views
5

पर पंक्ति मैं वर्तमान में कोडनिर्देशक फ्रेमवर्क के साथ काम कर रहा हूं। नीचे दिए गए कोड में, मैं Animal_model ऑब्जेक्ट प्राप्त करना चाहता हूं, stdClass ऑब्जेक्ट नहीं।कोड ऑब्जेक्ट के साथ क्लास ऑब्जेक्ट कैसे प्राप्त करें-> कोडिग्निटर

<?php 
class Animal_model extends CI_Model{ 

    var $idanimal; 
    var $name; 
    public static $table = 'animals'; 

    function __construct() { 
     parent::__construct(); 
    } 

    function getone(self $animal){ 
     $query = $this->db->get_where(self::$table, array('id_animal' => $animal->idanimal)); 

     if($query == FALSE){ 
      return FALSE; 
     }else{ 
      return $query->row(); // How to get an Animal_model object here? 
     } 
    } 
} 

$lion = new Animal_model(); 
$lion->idanimal = 25; 
var_dump($lion); // It says "object(Animal_model)". 

$lion = $lion->getone($lion); 
var_dump($lion); // Now it says "object(stdClass)". 

?> 

$query->row() को एनिमल_मोडेल ऑब्जेक्ट में कैसे परिवर्तित करें?

उत्तर

5

कोडइग्निटर के लिए अंतर्निहित कार्यक्षमता है!

return $query->row(0, 'Animal_model'); 
+1

धन्यवाद, यह वही है जो मैं ढूंढ रहा था! – Dacobah

0

आपका पहला var_dump($lion)object(Animal_model) प्रकार का है।

फिर आप $lion->getone($lion); $lion के परिणाम के साथ $lion का मान ओवरराइट अब या तो FALSE, या जो एक वस्तु (stdClass) रिटर्न $query->row() के मूल्य है।

$query->row()हमेशा एक डेटाबेस परिणाम वस्तु (एक stdClass वस्तु) वापस आ जाएगी।

आपका कोड ऐसा कर रहा है जो इसे माना जाता है।

http://ellislab.com/codeigniter/user-guide/database/results.html

मैं पूछ सकता हूँ क्यों तुम उस वस्तु की जरूरत प्रकार Animal_model का होना?

+0

'पंक्ति' विधि डेटाबेस परिणाम ऑब्जेक्ट को वापस नहीं लौटाएगी। आप एक stdClass ऑब्जेक्ट, एक सरणी, या एक कस्टम वर्ग के बीच चयन कर सकते हैं। [यह] देखें (http://ellislab.com/codeigniter/user-guide/database/results.html) या 'सिस्टम/डेटाबेस/डीबी_Result.php' के अंदर एक नज़र डालें। –

+0

मैं सही खड़ा हूँ। उसके लिये आपका धन्यवाद। – InsanityDefined

1
if($query == FALSE){ 
     return FALSE; 
    }else{ 
     // How to get an Animal_model object here? 
     $row = $query->row(); 

     $animal = new Animal_model(); 
     $animal->idanimal = $row->idanimal; 
     $animal->name= $row->name; 
     return $animal; 
    } 

ऊपर आप क्या चाहते हैं, लेकिन मैं यह एक बहुत अच्छा विचार है नहीं लगता कि ऐसा होगा। Animal जैसी दूसरी कक्षा होना बेहतर होगा जो किसी भी मॉडल का विस्तार नहीं करता जिसे आप किसी जानवर का प्रतिनिधित्व करने के लिए उपयोग कर सकते हैं।

class Animal 
{ 
    public name = ''; 
    public id = 0; 

    public function __construct($id, $name) 
    { 
     $this->id = $id; 
     $this->name = $name; 
    } 
} 

अपने मॉडल में, आप मॉडल ऑब्जेक्ट्स लौटने की बजाय, इसके उदाहरण बना सकते हैं और उन्हें वापस कर सकते हैं।

if($query == FALSE){ 
     return FALSE; 
    }else{ 
     $row = $query->row(); 
     return new Animal($row->idanimal, $row->name); 
    } 

मैं भी getone समारोह के बजाय एक आईडी लेने के लिए बदल जाएगा, और चुनें जहां इस आईडी मिलान:

function getone($id){ 

इस तरह आप पशु, मॉडल सौदों के लिए एक प्रबंधक के रूप में मॉडल का उपयोग डेटा के साथ और पशु वस्तुओं लौटता है।

0

वापसी के बजाय $ query-> पंक्ति(); आप Animal_model क्लास की ऑब्जेक्ट को तुरंत चालू कर सकते हैं और ऑब्जेक्ट के गुणों में $ query-> row() से मान असाइन कर सकते हैं। लेकिन मुझे यकीन नहीं है कि मुझे ऐसा करने में कोई मूल्य दिखाई देता है। आपको अभी भी वही डेटा मिल जाएगा। क्या ऐसी कोई विधि है जिसे आपको Animal_Model क्लास में चाहिए जिसे आप पंक्ति को पुनर्प्राप्त करने के बाद कॉल करना चाहते हैं?

साइडबार नोट ... आप अपनी संपत्तियों का वर्णन करने के लिए "var" के उपयोग से बचना चाहेंगे। शायद आप "संरक्षित" का उपयोग करना चाहते हैं जब तक कि आप सार्वजनिक या निजी के कारण के बारे में सोच सकें।

+0

var/संरक्षित के बारे में टिप के लिए धन्यवाद। – Dacobah

0

यदि मैं आपका प्रश्न समझ रहा हूं; जब आप व्यक्तिगत कॉलम डेटा के बजाय अपनी डेटाबेस तालिका में कॉल करते हैं तो आप एक कस्टम क्लास ऑब्जेक्ट (Animal_model टाइप करें) सही चाहते हैं?

तब सबसे पहले, जब आप $ query-> पंक्ति() पर कॉल करते हैं तो आप Animal_model ऑब्जेक्ट को पुनर्प्राप्त नहीं करते हैं। आप डेटाबेस पंक्ति वस्तु के बजाय पुनर्प्राप्त कर रहे हैं।कौन सा आप वास्तव में से अलग-अलग डेटा उदाहरणों को निकालने के लिए है:,

$row = $query->row(); 

    echo $row->title; 
    echo $row->name; 
    echo $row->body; 

इसलिए क्योंकि जिस तरह से आप मैं या तो एक कस्टम स्थिर समारोह है कि एक डेटाबेस पंक्ति वस्तु का एक उदाहरण ले जाएगा बनाने की सिफारिश करेंगे अपनी कक्षा के लिए बनाया गया है और एक नया Animal_model उदाहरण तत्काल। या एक विधि जो डेटाबेस पंक्ति ऑब्जेक्ट का उदाहरण लेती है और कहा गया ऑब्जेक्ट के फ़ील्ड में भर जाती है।