في قصاصة برمجية سابقة تحدثنا عن الدالة الرائعة withCount والتي تساعدنا في معرفة عدد الحقول الأبناء، مثل أنه إذا كان لدي مقال وأريد أن أعرض كل مقال وعدد التعليقات على كل مقال، ولروعة لارافيل فإنه في الإصدار الثامن تم إضافة مجموعة من الدوال الأخرى والتي تساعدنا في معرفة المجموع، المعدل، القيمة الأعلى والتي سنتعرف عليها في هذا المقال.
لنفرض أن لدي الحقول التالية
حقل المؤلفين
Schema::create('authors', function (Blueprint $table) { $table->id(); $table->string('title',100); $table->timestamps(); });
حقل الكتب
Schema::create('books', function (Blueprint $table) { $table->id(); $table->string('title',120); $table->float('price'); $table->bigInteger('author_id')->unsigned()->index(); $table->foreign('author_id')->references('id')->on('authors')->onDelete('Cascade')->onUpdate('Cascade'); $table->timestamps(); });
العلاقة بين جدولي المؤلفين والكتب
class Author extends Model { use HasFactory; public function books(){ return $this->hasMany('App\Models\Book'); } }
الأن نأتي لشرح الدوال
الدالة الأولى withSum
نستخدم الدالة لمعرفة مجموع حقول معينة، مثلا هنا أريد عرض المؤلف مع مجموع أسعار الكتب التابعة له
public function index(){ $authors=Author::select('id','first_name')->withSum('books','price')->get(); return $authors; }
النتيجة تكون على الشكل التالي
{ "id": 138, "first_name": "Edward", "books_sum_price": 1580 }, { "id": 139, "first_name": "Ghassan ", "books_sum_price": 1130 },
كما نلاحظ أنه تم إنشاء حقل جديد بالعرض (غير موجود بقاعدة البيانات)، بإسم books_sum_price تم عرض مجموع أسعار الكتب لكل كاتب.
الدالة الثانية withAvg
إذا أردنا أن نعرض كل كاتب مع معدل أسعار الكتب له
public function index(){ $authors=Author::select('id','first_name')->withAvg('books','price')->get(); return $authors; }
النتيجة تكون على الشكل التالي
{ "id": 138, "first_name": "Edward", "books_avg_price": 56.42857142857143 }, { "id": 139, "first_name": "Ghassan ", "books_avg_price": 56.5 },
كما نلاحظ أنه تم إنشاء حقل جديد بإسم books_avg_price
الدالة الثالثة withMin
إذا اردنا عرض كل كاتب مع أقل سعر كتاب له
public function index(){ $authors=Author::select('id','first_name')->withMin('books','price')->get(); return $authors; }
كالأمثلة السابقة حيث سيتم إضافة حقل books_min_price
{ "id": 138, "first_name": "Edward", "books_min_price": 40 },
الدالة الرابعة withMax
إذا أردنا عرض كل كاتب مع أعلى سعر كتاب له
public function index(){ $authors=Author::select('id','first_name')->withMax('books','price')->get(); return $authors; }
كالأمثلة السابقة حيث سيتم إضافة حقل books_max_price
{ "id": 138, "first_name": "Edward", "books_max_price": 75 },
الدالة الخامسة withCount
هذه الدالة تم شرحها سابقا، وهي لجلب الكتاب مع عدد الكتب التابعة لهم
public function index(){ $authors=Author::select('id','first_name')->withCount('books')->get(); return $authors; }
كالأمثلة السابقة حيث سيتم إضافة حقل books_count
{ "id": 138, "first_name": "Edward", "books_count": 10 },
جمال حد الخيال عاش نضال الشعب الفلسطيني
Sam
اكثر من رائع سلمت الانامل