نوشتن کوئری 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

 

در همین رابطه :   آموزش تبدیل SQL خام به Laravel Query Builder با Orator

منبع

دسته بندی : Laravel

دیدگاهتان را بنویسید

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