2015-01-16 4 views
5

मेरे पास SQL ​​सर्वर डेटाबेस है जिसमें एकाधिक स्कीमा है। मैंने sqlsrv ड्राइवर का उपयोग कर विभिन्न स्कीमा से तालिका में से किसी एक से चयन करने का प्रयास किया लेकिन अमान्य कॉन्फ़िगरेशन कहता है, तालिका मौजूद नहीं है। मैं sqlsrv ड्राइवर का उपयोग कर तालिका में स्कीमा का चयन कैसे कर सकता हूं? स्कीमा, स्वामी, और तालिका नाम, उदाहरण के लिए:Yii2 के साथ sqlserver में स्कीमा और तालिका का चयन करें?

dbo.user1.table1 

myconnection

<?php 
    return [ 
     'class' => 'yii\db\Connection', 
     'dsn' => 'sqlsrv:Server=192.168.10.70;Database=mydatabase', // MS SQL Server, sqlsrv driver public ip 
     'username' => 'user_username', 
     'password' => 'user_password', 
     'charset' => 'utf8', 
    ]; 
?> 

अपने मॉडल

<?php 
    namespace app\models; 

    use Yii; 
    use yii\db\ActiveRecord; 

    class Transaction extends \yii\db\ActiveRecord 
    { 
     /** 
     * @inheritdoc 
     */ 
     public static function tableName() 
     { 
      return 'schema2.transaction'; 
     } 

     public static function getDb() 
     { 
      return \Yii::$app->db3; // use the "db3" application component 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function rules() 
     { 
      return [[['id', 'number', 'amount', 'date', 'status', 'description'], 'required']]; 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function attributeLabels() 
     { 
      return [ 
      'id' => Yii::t('app', 'Uid'), 
      'number' => Yii::t('app', 'Number'), 
      'date' => Yii::t('app', 'Date'), 
      'amount' => Yii::t('app', 'Amount'), 
      'description' => Yii::t('app', 'Item Description'), 
      'status' => Yii::t('app', 'status'), 
      ]; 
     } 
    } 
?> 
+0

क्या आप SQL Server 2008 में तालिका बनाने के लिए Yii2 माइग्रेट का उपयोग कर सकते थे? – Blackjack

उत्तर

0

अच्छी तरह से मुझे जवाब मिला। मैं इसका उपयोग नहीं कर सकता क्योंकि डेटाबेस sqlserver 2000 का उपयोग कर रहा है और मेरा चालक इसके साथ संगत नहीं था। मैं इसे एसक्यूएल सर्वर 2008 में माइग्रेट करने के बाद सबकुछ क्रिस्टल स्पष्ट करता हूं। उम्मीद है कि यह किसी की मदद करता है।

3

एमएस एसक्यूएल में पूर्ण तालिका नाम को तीन भागों में शामिल है इसका मतलब है कि table1 स्कीमामें user1 द्वारा बनाया गया था।

आप मालिक को नहीं जानते हैं या यह डिफ़ॉल्ट उपयोगकर्ता (sa) है, तो आप इसे इस तरह से पारित कर सकते हैं:

dbo..table1 

तो मैं सुझाव है कि आप

return 'schema2..transaction'; 

या आज़माने के लिए

return 'schema2.YOUR_USER_NAME_HERE.transaction'; 

विभिन्न स्कीमा से तालिका नाम को सही ढंग से हल करने के लिए।

+0

ने स्कीमा 2 का उपयोग करके अपने समाधान की कोशिश की। ट्रांसक्रिप्शन SQLSTATE [42000] लौटा: [माइक्रोसॉफ्ट] [एसक्यूएल सर्वर मूल क्लाइंट 10.0] [एसक्यूएल सर्वर] खाली ऑब्जेक्ट या कॉलम नामों का उपयोग नहीं कर सकता। यदि आवश्यक हो तो एक ही स्थान का उपयोग करें। दूसरा समाधान रिटर्न अमान्य ऑब्जेक्ट नाम – Gamma

+0

यह अजीब है, जब मैं schema2.xxx को वापस आज़माता हूं तो अमान्य ऑब्जेक्ट नाम ऐसा होता है क्योंकि कोई तालिका xxx नहीं है, लेकिन जब मैंने schema2.transaction की कोशिश की तो कहा कि तालिका मौजूद नहीं है। क्या यह yii में बग है? – Gamma

+0

मैंने वाईआई माइग्रेट के माध्यम से SQL सर्वर में तालिका बनाने की कोशिश की है, लेकिन इसमें केवल 2 भाग हैं, उदाहरण: root.user। यह जीआईआई का उपयोग करते समय एक समस्या का कारण बनता है, क्योंकि जीआईआई डेटाबेस में किसी भी तालिका को पढ़ सकता है, मैं तालिका को तीन भाग कैसे बना सकता हूं, उदाहरण: dbo.root.user? – Blackjack

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