کار با select Query در Yii2

استفاده از کوئری select با استفاده از createCommand
برای این کار ابتدا باید به دیتابیس متصل شویم

use yii\db\Query;
$connection = \Yii::$app->db;
      queryAll
    $model = $connection->createCommand('SELECT * FROM tbl_user');
    $users = $model->queryAll();
    

    به این صورت که آرایه ای تو در تو از دیتا های موجود را بر می گرداند.

    Array
    (
        [۰] => Array
            (
                [id] => 1
                [value] => 89.3
                [publish_date] => 2015-08-17 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۱] => Array
            (
                [id] => 2
                [value] => 88.4
                [publish_date] => 2015-09-03 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۲] => Array
            (
                [id] => 3
                [value] => 87.7
                [publish_date] => 2015-09-11 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۳] => Array
            (
                [id] => 4
                [value] => 88.4
                [publish_date] => 2015-09-20 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۴] => Array
            (
                [id] => 5
                [value] => 87.3
                [publish_date] => 2015-09-25 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۵] => Array
            (
                [id] => 6
                [value] => 87.9
                [publish_date] => 2015-10-01 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۶] => Array
            (
                [id] => 7
                [value] => 87.5
                [publish_date] => 2015-10-08 00:00:00
                [picture] => default.jpg
                [user_id] => 1
          )  
        [۷] => Array
            (
                [id] => 8
                [value] => 89.300
                [publish_date] => 2015-10-15 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۸] => Array
            (
                [id] => 9
                [value] => 86
                [publish_date] => 2015-10-24 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
        [۹] => Array
            (
                [id] => 10
                [value] => 86.900
                [publish_date] => 2015-10-30 00:00:00
                [picture] => default.jpg
                [user_id] => 1
            )
    )
    

      queryOne

    $model = $connection->createCommand("SELECT * FROM tbl_user where userid=$id");
    $users = $model->queryOne();
    

    فقط یک رکورد بر می گرداند البته به صورت آرایه

    Array
    (
        [id] => 1
        [value] => 89.3
        [publish_date] => 2015-08-17 00:00:00
        [picture] => default.jpg
        [user_id] => 1
    )
    
      queryColumn
    $model = $connection->createCommand('SELECT value FROM weight');
    $users = $model->queryColumn();
    

    فقط ستون صدا زده شده را در آرایه نمایش می دهد

    Array
    (
        [۰] => ۸۹٫۳
        [۱] => ۸۸٫۴
        [۲] => ۸۷٫۷
        [۳] => ۸۸٫۴
        [۴] => ۸۷٫۳
        [۵] => ۸۷٫۹
        [۶] => ۸۷٫۵
        [۷] => ۸۹٫۳۰۰
        [۸] => ۸۶
        [۹] => ۸۶٫۹۰۰
    )
    

      queryScalar

    $model = $connection->createCommand('SELECT COUNT(*) FROM weight');
                    $weight = $model->queryScalar();
    

    فقط عدد بر می گرداند .
    برای sum , max نیز استفاده می شود

4 thoughts on “کار با select Query در Yii2

  1. با سلام
    من توی سایت چند تا یوزر دارم
    با yii نوشته شده است
    توی گوگل که سرچ کردم دیدم شما yii بلد هستید
    برای یوزرها یک فیلد تعریف کردم که مطالبی که ارسال می کنند منتشر نشه
    فیلد post_status
    اگر برابر یک باشه یعنی مطالب اون کاربر توی سایت قرار نشون داده نشه
    $dPost = dayPost::model()->findAll(‘status=1 and u_id!=? order by id desc limit 20’,array($dayid));
    u_id کاربر است
    $dayid = Yii::app()->db->createCommand(‘select id from alluser post_status=1’)->queryScalar();
    با این دستور من هر چند تا کاربر رو که مطالبشون رو توی سایت غیرفعال کردم فقط یه دونه رو لحاظ می کنه
    نمی دونم چیکارش کنم
    من می خواهم کاربرانی که وضعیت محصول اونا رو غیرفعال کردم توی سایت نشون نده
    این طوری فقط یه کاربر محصولاتش رو نشون نمیده
    خواهشمندم راهنمایی کنید
    متشکرم

    1. سلام.
      فکر میکنم کوئریتون اشتباه هست:
      $dayid = Yii::app()->db->createCommand(‘select id from alluser post_status=1’)->queryScalar();
       queryScalar تعداد بر میگردونه برای sum  یا count
      در صورتی که شما در کوئریتون ازش استفاده نکردین.
      واسه همین یک بر میگردونه
      ضمنا از where  هم استفاده نکردین
      (select count(id) from all user where post_status=1)->queryScalar();
      با این کد تعدا کاربرانی که post_status=1  هستند رو بر میگردونه .
      توجه داشته باشین: تعدادشون.مثلا ۵ نفر

      1. با سلام و تشکر از شما
        نه من where رو توی کد نوشته بودم
        الان که نگاه می کنم می بینم نیست و ساختار هم بهم ریخته!
        میدونم queryscalar عدد رو بر می گردونه ولی چرا فقط یه عدد رو برمی گردونه! من می خوام مثلا تمام آیدی های یک جدول رو برگردونه وقتی وضعیت ارسال مطلب یک کاربر برابر یک باشه!
        توی اس کیو ال خیلی راحت همه ایدی ها برگشت داده میشن ولی چرا توی yii برگشت داده نمیشن!
        select id from alluser where post_status=1
        توی اس کیو ال اینو اجرا کنی تموم اعداد ایدی هایی که مدنظر داریم برگشت داده میشن ولی با yii نمیشه!!!!
        الان من بخوام همه ی آیدی ها رو برگشت بدم باید از چه کدی استفاده کنم؟!!
        هیچ کاری نمیشه کرد؟
        ممنون میشم راهنمایی کنید
        با تشکر

        1. ببینید به عنوان مثال در یک مدرسه میخواین ببینید چند دانش آموز داریم که معدلش بالای ۱۷ شده. از queryScalar استفاده می کنیم.
          نتیجه میشه : مثلا ۱۰ دانش آموزش
          حالا اگر بخواین اسامی اون ۱۰ دانش آموز رو به دست بیاریم از queryAll() استفاده میکنیم
          در کد شما اینطوری میشه :

          $dayid = Yii::app()->db->createCommand(‘select id from alluser where post_status=1’)->queryAll();

          که بهتون یک آرایه بر میگردونه .

Leave a Reply

Your email address will not be published. Required fields are marked *