yii2
डेटाबेस के साथ काम करना
खोज…
Yii2 क्वेरी बिल्डर का उपयोग करना
Yii2 डेटाबेस से डेटा प्राप्त करने के लिए कुशल तरीके प्रदान करता है। एक साधारण कर्मचारी तालिका के एक उदाहरण का उपयोग करें, जिसमें emp_id, emp_name और emp_salary क्षेत्र होते हैं । कर्मचारी के नाम और उनके वेतन को पुनः प्राप्त करने के लिए, हम क्वेरी का उपयोग करते हैं।
select emp_name,emp_salary from employee
Yii2 में उपरोक्त क्वेरी उत्पन्न करने के लिए, कई विधियाँ हैं। विधि का एक yii \ db \ Quer y ऑब्जेक्ट का उपयोग करना है।
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->select(['emp_name','emp_salary']) //specify required columns in an array
->from('employee') //specify table name
->all(); //returns an array of rows with each row being an associative array of name-value pairs.
हम $ पंक्तियों के सरणी में प्रत्येक नाम-मूल्य जोड़ी के माध्यम से एक फॉरेस्ट लूप का उपयोग कर सकते हैं।
foreach ($rows as $row) {
echo "Employee Name: ".$row['emp_name'].",Employee Salary: ".$row['emp_salary']."<br>";
}
यह आउटपुट करेगा
कर्मचारी का नाम: किरण, कर्मचारी वेतन: 25000
कर्मचारी का नाम: मिधुन, कर्मचारी वेतन: 50000
कर्मचारी का नाम: जिष्णु, कर्मचारी वेतन: 20000
कर्मचारी का नाम: अजित, कर्मचारी वेतन: 25000
कर्मचारी का नाम: अक्षय, कर्मचारी वेतन: 750000
और ज्यादा उदाहरण
मान लीजिए, हमें उन कर्मचारियों का नाम खोजने की आवश्यकता है, जिनका वेतन 25000 के बराबर है। हम क्वेरी को sql में लिख सकते हैं
select emp_name from employee where salary=25000
Yii2 में, उपरोक्त क्वेरी बनाने के लिए कोड
$query=new \yii\db\Query();
$rows=$query->select(['emp_name'])
->from('employee')
->where(['emp_salary'=>25000]) //specify the condition as an associative array where key is column name
->all();
अगर हमें ऐसे कर्मचारियों के नाम खोजने हैं, जिनका वेतन 25000 से अधिक है, तो हम कोड को Yii2 में लिख सकते हैं
$rows=$query->select(['emp_name'])
->from('employee')
->where(['>','emp_salary', 25000])
//Here first element in the above array specify relational operator used, second element specify the table name and third the value itself.
->all();
जहाँ () का उपयोग करके अधिक स्थिति की जाँच
नीचे दी गई के रूप में () विधि का उपयोग करके कई स्थितियों को लिखा जा सकता है।
// Creates a new \yii\db\Query() object
$query = new \yii\db\Query();
$rows = $query->select(['emp_name','emp_salary'])
->from('employee')
->where(['emp_name' => 'Kiran', 'emp_salary' => 25000]) // Specify multiple conditions
->one(); // Returns the first row of the result
उपरोक्त कोड में एक कर्मचारी होगा जिसका नाम किरन और वेतन 25000 होगा । यदि कई कर्मचारी उपरोक्त स्थिति को संतुष्ट कर रहे हैं, तो कॉल वन () यह सुनिश्चित करता है कि केवल पहला परिणाम प्राप्त किया जाए। सभी परिणामों को लाने के लिए आपको सभी () का उपयोग करना चाहिए।
ध्यान दें कि यदि आप सभी का उपयोग करते हैं () परिणाम हमेशा एक सरणी होगा; भले ही केवल एक या शून्य परिणाम हो। इस सरणी में एरेज़ के रूप में सभी परिणाम हैं या जब कोई रिकॉर्ड मेल नहीं खाता है तो खाली है। यदि क्वेरी कुछ भी वापस नहीं आती है, तो कॉल वन () परिणामी सरणी को सीधे या गलत तरीके से लौटाएगा।
Sql में समकक्ष कोड नीचे दिया गया है।
select emp_name, emp_salary from employee where emp_name = 'Kiran' and emp_salary = 25000 limit 1;
Yii2 में उपरोक्त क्वेरी लिखने का एक वैकल्पिक तरीका नीचे दिया गया है।
$rows = $query->select(['emp_name', 'emp_salary'])
->from('employee')
->where(['emp_name' => 'Kiran'])
->andWhere(['emp_salary' => 25000])
->one();
शर्तों के अतिरिक्त सेट andWhere का उपयोग कर निर्दिष्ट किया जा सकता। यह उपयोगी होगा यदि हमें बाद में क्वेरी में अतिरिक्त स्थिति जाँच को जोड़ने की आवश्यकता है।
फिर भी कई शर्तों को निर्दिष्ट करने का एक और तरीका ऑपरेटर प्रारूप का उपयोग करके बना है जहां () विधि। उपरोक्त क्वेरी को नीचे दिए गए अनुसार भी लिखा जा सकता है।
$rows = $query->select(['emp_name','emp_salary'])
->from('employee')
->where(['and', 'emp_name="kiran"', 'emp_salary=25000'])
->one();
यहां हम ऑपरेटर को ' और ' सरणी में पहले तत्व के रूप में निर्दिष्ट करते हैं। इसी प्रकार हम ' या ', 'के बीच ', 'के बीच नहीं ', ' इन ', ' इन ', ' लाइक ', ' या लाइक ', ' लाइक ' या ' लाइक नहीं ', ' मौजूद ' का भी उपयोग कर सकते हैं। , ' मौजूद नहीं ', ' > ', ' <= ' आदि ऑपरेटरों के रूप में।
'In' और 'like' का उपयोग करने के उदाहरण
मान लीजिए कि हमें 20000, 25000 और 50000 वेतन वाले कर्मचारियों को ढूंढना है। सामान्य एसक्यूएल में हम क्वेरी के रूप में लिखेंगे
select * from employee where salary in (20000,25000,50000)
Yii2 में हम इसे नीचे दिए गए अनुसार लिख सकते हैं।
$rows = $query->from('employee')
->where(['emp_salary' => [20000,25000,50000]])
->all();
उसी स्थिति को निर्दिष्ट करने का एक और तरीका है
$rows = $query->from('employee')
->where(['in', 'emp_salary', [20000,25000,50000]]) // Making use of operator format of where() method
->all();
इसी तरह 'नहीं' में बजाय 'में' की निर्दिष्ट किया जा सकता हम होने वेतन 20000, 25000 और 50000 नहीं सभी कर्मचारियों को पाने के लिए चाहते हैं।
अब हमें '' जैसे '' का उपयोग करने के कुछ उदाहरण दिखाई देते हैं जहाँ () स्थिति है। मान लीजिए, हमें सभी कर्मचारियों को उनके नाम पर स्ट्रिंग ' गोपाल ' खोजने की आवश्यकता है। नाम वेणुगोपाल, राजगोपाल, गोपालकृष्णन आदि हो सकते हैं। एसक्यूएल क्वेरी नीचे दी गई है।
select * from employee where emp_name like '%gopal%'
Yii2 में हम इसे लिखेंगे
$rows = $query->from('employee')
->where(['like', 'emp_name', 'gopal']) // Making use of operator format of where() method
->all();
यदि हम सभी कर्मचारियों को उनके नाम पर ' गोपाल ' और ' नायर ' रखने की आवश्यकता है। हम के रूप में लिख सकते हैं
$rows = $query->from('employee')
->where(['like', 'emp_name', ['gopal','nair']]) // Making use of operator format of where() method
->all();
यह मूल्यांकन करेगा
कर्मचारी से चुनें * जहाँ '% गोपाल%' और '% nair%' जैसे emp_name
इसी तरह हम उपयोग 'की तरह नहीं' सभी कर्मचारियों को इंगित करने के लिए उनके नाम में स्ट्रिंग 'गोपाल' और 'नायर' होने नहीं कर सकते।
आदेश का उपयोग करना ()
ऑर्डरबी () विधि SQL क्वेरी के टुकड़े द्वारा ORDER को निर्दिष्ट करती है। उदाहरण के लिए हमारे कर्मचारी टेबल को emp_id, emp_first_name, emp_last_name और emp_salary वाले क्षेत्रों पर विचार करें। मान लीजिए कि हमें कर्मचारी के वेतन के बढ़ते क्रम से परिणाम ऑर्डर करने की आवश्यकता है। हम इसे कर सकते हैं। नीचे दिए अनुसार sql।
Select * from employee order by emp_salary
Yii2 में, हम नीचे दिए गए अनुसार क्वेरी का निर्माण कर सकते हैं
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows= $query->from('employee')->orderBy([
'emp_salary' => SORT_ASC //specify sort order ASC for ascending DESC for descending
])->all();
अगर हमें कर्मचारियों को उनके पहले नाम के साथ आरोही क्रम में और फिर उनके वेतन को अवरोही क्रम में रखने की आवश्यकता है, तो हम इसे निम्न प्रकार से सादे वर्ग में लिख सकते हैं।
Select * from employee order by emp_first_name ASC, emp_salary DESC
निम्नानुसार yii2 का उपयोग करके बराबर एसक्यूएल का निर्माण किया जा सकता है
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows= $query->from('employee')->orderBy([
'emp_first_name' => SORT_ASC
'emp_salary' => SORT_DESC
])->all();
आप कच्चे स्ट्रिंग स्टेटमेंट लिखते समय, स्ट्रिंग का उपयोग करके ORDER को निर्दिष्ट कर सकते हैं। उदाहरण के लिए, उपरोक्त क्वेरी को नीचे दिए गए अनुसार भी उत्पन्न किया जा सकता है।
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC, emp_salary DESC')->all();
आप खंड में ORDER द्वारा अतिरिक्त कॉलम जोड़ने के लिए addOrderBy () को कॉल कर सकते हैं। उदाहरण के लिए
//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC')
->addOrderBy('emp_salary DESC')->all();