2013-01-31 24 views
6

में वर्चुअल फ़ील्ड का उपयोग करके मैंने दस्तावेज के माध्यम से पढ़ा है और यह समझने के लिए संघर्ष किया है कि क्या करना है। इसके अलावा, मैंने यहां स्टैक ओवरफ्लो पर प्रश्नों के माध्यम से पढ़ा है, और मैंने जो भी प्रयास किया है, उसकी मदद नहीं की।केकपीएचपी 2.x

मुझे एक बूंद मिल गई है कि मैं कंपनी के सभी कर्मचारियों को सूचीबद्ध करना चाहता हूं। सूची इस तरह प्रदर्शित किया जाना चाहिए:

Name Surname (Job Title) 

मेरे मॉडल में, मैं कोड के इस टुकड़े है:

public $virtualFields = array(
    'fullname' => 'CONCAT(HrEmployee.name, " ", HrEmployee.surname, " (", HrEmployee.jobTitle, ")")' 
); 

और मेरे नियंत्रक में, मेरे पास इस:

$hrEmployees = $this->User->HrEmployee->find('fullname', 
    array(
     'fields' => array('HrEmployee.name','HrEmployee.surname','HrEmployee.jobTitle'), 
     'order' => array('HrEmployee.name'=>'ASC','HrEmployee.surname'=>'ASC') 
)); 

लेकिन मुझे यह त्रुटि मिलती है:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `User__fullname` FROM `intraweb_db`.`users` AS `User` WHERE `User`.`hr_emp' at line 1 

क्या क्या मुझे बदलना चाहिए? मैं देख सकता हूं कि यह क्वेरी बना रहा है, लेकिन यह बहुत खराब बदल रहा है ...

क्या कोई भी सहायता कर सकता है?

उत्तर

3

कूल तो मैं उसे ठीक किया। मुझे सही दिशा में इंगित करने के लिए ब्रैंडन का आंशिक रूप से धन्यवाद।

वर्चुअल फ़ील्ड सीमा के कारण, मुझे कामकाज करना पड़ा।

तो, मेरी HrEmployee मॉडल में मैं इस किया था:

public $virtualFields = array(
    'fullname' => 'CONCAT(HrEmployee.name, " ", HrEmployee.surname, " (", HrEmployee.jobTitle, ")")' 
); 

और मेरे उपयोगकर्ता मॉडल में, मैं इसे इस के लिए बदल दिया:

class User extends AppModel { 
public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
    $this->virtualFields['fullname'] = $this->HrEmployee->virtualFields['fullname']; 
} 

और अंत में, मेरी UsersController में, मैं सिर्फ बदला यह थोड़ा सा:

$hrEmployees = $this->User->HrEmployee->find('list', 
    array(
     'fields' => array("id","fullname"), 
     'order' => array('HrEmployee.name ASC','HrEmployee.surname ASC') 
)); 
3

केक दस्तावेज़ के नीचे आभासी क्षेत्रों में से कुछ सीमाएं ..

virtualFields के कार्यान्वयन में कुछ सीमाएँ हैं निर्दिष्ट करता है। सबसे पहले आप परिस्थितियों, ऑर्डर या फ़ील्ड सरणी के लिए संबंधित मॉडलों पर वर्चुअलफिल्ड्स का उपयोग नहीं कर सकते हैं। ऐसा करने से आम तौर पर एक एसक्यूएल त्रुटि होती है क्योंकि फ़ील्ड को ओआरएम द्वारा प्रतिस्थापित नहीं किया जाता है। ऐसा इसलिए है क्योंकि गहराई का आकलन करना मुश्किल है जिस पर एक संबंधित मॉडल पाया जा सकता है।

http://book.cakephp.org/2.0/en/models/virtual-fields.html#limitations-of-virtualfields

+2

धन्यवाद। इस जवाब ने मुझे सही दिशा में इंगित किया। मेरा जवाब देखें – Albert

+0

खुशी है कि मैं आंशिक रूप से मदद कर सकता हूं, और आपके समाधान को पोस्ट करने के लिए धन्यवाद! –