تیشرت اختصاصی برنامه نویس ها
خرید
اطلاعات بیشتر

نوشتن کوئری left join در فریم ورک لاراول ۵

تبلیغات
کانال تلگرام فتولیا

فرض کنید شما یک محصول را دارید در سایت خود می فروشید و می خواهید لیست کاربرانی را که توسط مهدی مهدوی معرفی شده اند بدست آورید.همینطور تعداد دفعاتی که هر کدام از آنها سفارش داده اند. احتمالا کاربرانی هم خواهند بود که توسط مهدی مهدوی به سایت ما آمده اند ولی هنوز سفارش شان را تکمیل نکرده اند پس نیاز داریم لیست آنها را نیز با Left Join بدست آوریم.

در نهایت شما می خواهید ID،نام و تعداد سفارشات کاربران را بدست آورید. برای این کار از دو جدولی که از قبل داریم استفاده می کنیم . یعنی users و orders .

فرض کنید جدول order یا سفارشات شامل فیلدهای id , user_id (می تواند فیلد قیمت کل سفارش نیز باشد و ..) هست و جدول دیگر یعنی users شامل فیلدهای id, name, referrer_id است.

با سه روش می توانیم به خواسته خود برسیم .

 

روش SQL خام

id یکتای مهدی مهدوی همان $referrer_id است

$sql = "SELECT users.id , users.name, orders.num_orders
	FROM users
	LEFT JOIN (
			SELECT user_id, count( * ) AS num_orders
			FROM orders
			GROUP BY user_id
		) orders ON orders.user_id = users.id

	WHERE referrer_id = '{$referrer_id}'";

// Now run the query

 

روش استفاده از Eloquent در Laravel 5

هنگام استفاده از DB::raw() مراقب حمله های Sql Injection باشید.

$temptable = DB::raw("(SELECT user_id, count(*) AS num_orders 
		FROM orders GROUP BY user_id) as orders");
		
return DB::table('users')
	->select('users.id','users.name', 'orders.num_orders')
	->leftJoin($temptable, 'orders.user_id', '=', 'users.id') 
	->where('referrer_id', '=', $referrer_id)
	->get();

 

خروجی

خروجی احتمالی این چنین خواهد بود

array (size=5)
  ۰ => 
    object(stdClass)[187]
      public 'id' => string '16' (length=2)
      public 'name' => string 'Stoltenberg, Sanford And Pfeffer' (length=32)
      public 'num_collections' => string '1' (length=1)
  ۱ => 
    object(stdClass)[186]
      public 'id' => string '20' (length=2)
      public 'name' => string 'Ebert, Daugherty And Mann' (length=25)
      public 'num_orders' => string '2' (length=1)
  ۲ => 
    object(stdClass)[185]
      public 'id' => string '23' (length=2)
      public 'name' => string 'Daugherty LLC' (length=13)
      public 'num_orders' => string '1' (length=1)
  ۳ => 
    object(stdClass)[195]
      public 'id' => string '24' (length=2)
      public 'name' => string 'Reilly-Greenfelder' (length=20)
      public 'num_orders' => null
  ۴ => 
    object(stdClass)[196]
      public 'id' => string '27' (length=2)
      public 'name' => string 'Breitenberg-Wilkinson' (length=21)
      public 'num_orders' => null

 

در همین رابطه :   لاراول 5.4 : رفع مشکل Specified key was too long error

منبع

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

More in ابزارها, تجهيزات همراه
بهترین ویرایشگرهای رایگان کد برای آندروید

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

Close