object یا اشیاء دسترسی به داده ها در فریمورک Yii
برای اجرای یک SQL query باید مراحل زیر را طی کنید :
- یک yii\db\Command را با یک SQL query ایجاد کنید.
- parameterها را bind کنید (الزامی نیست)
- فرمان را اجرا کنید
مرحله 1 - یک تابع به نام actionTestDb در SiteController ایجاد کنید.
public function actionTestDb(){
// return a set of rows. each row is an associative array of column names and values.
// an empty array is returned if the query returned no results
$users = Yii::$app->db->createCommand('SELECT * FROM user LIMIT 5')
->queryAll();
var_dump($users);
// return a single row (the first row)
// false is returned if the query has no result
$user = Yii::$app->db->createCommand('SELECT * FROM user WHERE id=1')
->queryOne();
var_dump($user);
// return a single column (the first column)
// an empty array is returned if the query returned no results
$userName = Yii::$app->db->createCommand('SELECT name FROM user')
->queryColumn();
var_dump($userName);
// return a scalar value
// false is returned if the query has no result
$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user')
->queryScalar();
var_dump($count);
}
مثال بالا راه های مختلفی برای استخراج اطلاعات از یک DB را نشان می دهد.
مرحله 2 - به آدرس http://localhost:8080/index.php?r=site/test-db بروید، آنچه که مشاهده می کنید مطابق با تصویر زیر می باشد.
![]()
یک فرمان SQL ایجاد کنید
برای ساخت دستورات SQL با استفاده از parameterها، همیشه باید از رویکرد bind کردن parameter ها برای جلوگیری از حملات SQL injection استفاده کنید.
مرحله 1 - متد actionTestDb را به شکل زیر ویرایش کنید.
public function actionTestDb() {
$firstUser = Yii::$app->db->createCommand('SELECT * FROM user WHERE id = :id')
->bindValue(':id', 1)
->queryOne();
var_dump($firstUser);
$params = [':id' => 2, ':name' => 'User2'];
$secondUser = Yii::$app->db->createCommand('SELECT * FROM user WHERE
id = :id AND name = :name')
->bindValues($params)
->queryOne();
var_dump($secondUser);
//another approach
$params = [':id' => 3, ':name' => 'User3'];
$thirdUser = Yii::$app->db->createCommand('SELECT * FROM user WHERE
id = :id AND name = :name', $params)
->queryOne();
var_dump($thirdUser);
}
در کد بالا :
bindValue() - یک parameter value را bind می کند.
bindValues() - چندین parameter value را bind می کند.
مرحله 2 - اگر در مرورگر وب تان به آدرس http://localhost:8080/index.php?r=site/test-db بروید، آنچه که مشاهده می کنید مطابق با تصویر زیر خواهد بود.
![]()
Query های INSERT, UPDATE , DELETE
برای نوشتن query های INSERT، UPDATE و DELETE می توانید از متدهای insert(), update(),delete() استفاده کنید.
مرحله 1 - متد actionTestDb را به صورت زیر ویرایش کنید.
public function actionTestDb() {
public function actionTestDb(){
// INSERT (table name, column values)
Yii::$app->db->createCommand()->insert('user', [
'name' => 'My New User',
'email' => 'mynewuser@gmail.com',
])->execute();
$user = Yii::$app->db->createCommand('SELECT * FROM user WHERE name = :name')
->bindValue(':name', 'My New User')
->queryOne();
var_dump($user);
// UPDATE (table name, column values, condition)
Yii::$app->db->createCommand()->update('user', ['name' => 'My New User
Updated'], 'name = "My New User"')->execute();
$user = Yii::$app->db->createCommand('SELECT * FROM user WHERE name = :name')
->bindValue(':name', 'My New User Updated')
->queryOne();
var_dump($user);
// DELETE (table name, condition)
Yii::$app->db->createCommand()->delete('user', 'name = "My New User
Updated"')->execute();
$user = Yii::$app->db->createCommand('SELECT * FROM user WHERE name = :name')
->bindValue(':name', 'My New User Updated')
->queryOne();
var_dump($user);
}
}
مرحله 2 – در مرورگر وب تان آدرس http://localhost:8080/index.php?r=site/test-db را تایپ کنید.آنچه که مشاهده می کنید مطابق با تصویر زیر می باشد.
![]()
این فصل در یک نگاه:
…
سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…این فصل در یک نگاه:
…
پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…

