رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
انتخاب فیلدها در کوئری؟
#1
  $personnel_info = DB::table('assigns AS a')
            ->join('boxes AS b','b.id','=', 'a.box_id')
           ->join('positions AS p','p.id','=', 'b.position_id')
           ->select('a.id','b.id AS box_id','p.id as position_id','p.title','a.status','a.end_date')
           ->where('a.personnel_id','=',$personnel_id)
           ->get();
اینا هم روابط این جدول هستند
    class Boxes extends Model
{
   public function position()
   {
       return $this->belongsTo('Positions');
   }

   public function assign()
   {
       return $this->hasOne('Assigns', 'box_id');
   }
}


چطور میتونم با استفاده از دستورات Eloquent مثل with همچین کوئری رو بسازم که دقیقا فقط همون فیلدهای انتخابی من رو بیاره؟
بدون اینکه توی مدل Boxes بیام فیلدهای بازگشتی از جداول assign , position رو مشخص کنم(چون هارد کد میشه)
ممنون
پاسخ
تشکر شده توسط:
#2
سلام. همه متدهای query builder داخل eloquent هم قابل دسترسی هستند مثلا
$users = User::join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.*', 'contacts.phone', 'orders.price')
            ->get();

همینطور توی روابط هم میتونید متد select رو استفاده کنید

$users = User::with(['posts' => function ($query) {
	$query->select('id', 'title');
}])->select('id', 'name')->get();
اون select داخل closure واسه ستون های جدول رابطه و select بیرونی هم واسه خود جدول اصلی که تو مثال بالا users هست
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: R.Rajai.Rad




کاربران در حال بازدید این موضوع: 1 مهمان