2011-12-22 12 views
6

में एकाधिक जुड़ता है मैं कई तालिकाओं से डेटा प्राप्त करने की कोशिश कर रहा हूं और मैंने इस त्रुटि के साथ समाप्त कर दिया है: एसक्यूएल: एसक्यूएलस्टेट [42 एस 22]: कॉलम नहीं मिला: 1054 अज्ञात कॉलम 'पी। फर्स्टनाम' 'फ़ील्ड लिस्ट'अज्ञात कॉलम - सीडीबीक्रिटिरिया

$criteria = new CDbCriteria; 
    $criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email'; 
    $criteria->join = 'LEFT JOIN `profiles` p ON p.user_id = user_id'; 
    $criteria->join = 'LEFT JOIN users u ON user_id = u.id'; 
    $criteria->condition = 'offer_id = :oID'; 
    $criteria->params = array(':oID' => $_GET['id']); 

    $model = MyModel::model()->findAll($criteria); 

कोई भी जानता है कि मैं क्या गलत कर रहा हूं? या संबंधित डेटा प्राप्त करने का कोई बेहतर तरीका है?

उत्तर

18

आप वही गलती कर रहे हैं जो मैंने किया है।

आप दूसरा में शामिल होने जोड़कर अधिलेखन प्रथम, द्वितीय एक के साथ शामिल होने, के बजाय कर रहे हैं।

$criteria->join = "join ...."; //first join 
$criteria->join .= "join ...."; //second join 

चियर्स

3

यदि आप अपनी डेटाबेस संरचना दिखाते हैं तो यह बेहतर होगा। लेकिन यहाँ यह समाधान का उपयोग कर कई तालिकाओं में शामिल होने के शामिल होने

कोड तालिकाओं में शामिल होने के लिए छोड़ दिया है:

$criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email'; 
$criteria->alias = 'c'; 
$criteria->join = 'LEFT JOIN profiles p ON (p.user_id = c.user_id) LEFT JOIN users u ON (c.user_id = u.id)'; 

आशा है कि यह आप में मदद मिलेगी।

7

असल में अपनी तरह से इस तरह उपयोगकर्ता के लिए बेहतर कुछ खंड "के साथ":

$criteria->with = array(
    'profiles '=>array(
     'select'=>'profiles.user_id', 
     'together'=>true 
    ), 
    'users'=>array(
      'select'=>'users.id', 
      'together'=>true 
    ) 
); 

आप यह भी मॉडल में CGridView dataProvider के लिए खोज का उपयोग कर सकते हैं।

संबंधित मुद्दे