الفرق بين المراجعتين لصفحة: «Laravel/eloquent collections»
Safwan-alhaji (نقاش | مساهمات) طلا ملخص تعديل |
رؤيا-بنعطية (نقاش | مساهمات) لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:المجموعات في رابط الكائنات بالعلاقات Eloquent}}</noinclude> | <noinclude>{{DISPLAYTITLE:المجموعات في رابط الكائنات بالعلاقات Eloquent}}</noinclude> | ||
== مقدمة == | == مقدمة == | ||
إنّ جميع مجموعات النتائج المتعددة المعادة من Eloquent هي كائنات من الصنف <code>Illuminate\Database\Eloquent\Collection</code>، بما فيها النتائج المستردة من التابع <code>get</code> أو من العلاقات. يرث صنف مجموعة Eloquent من [[Laravel/collections|الصنف الأساسي لمجموعة Laravel]]، وبالتالي ترث هذه المجموعات الكثير من التوابع التي تساعد بالعمل مع المصفوفات المستخدمة مع نماذج Eloquent. | إنّ جميع مجموعات النتائج المتعددة المعادة من [[Laravel/eloquent|Eloquent]] هي كائنات من الصنف <code>Illuminate\Database\Eloquent\Collection</code>، بما فيها النتائج المستردة من التابع <code>get</code> أو من العلاقات. يرث صنف مجموعة [[Laravel/eloquent|Eloquent]] من [[Laravel/collections|الصنف الأساسي لمجموعة Laravel]]، وبالتالي ترث هذه المجموعات الكثير من التوابع التي تساعد بالعمل مع المصفوفات المستخدمة مع نماذج [[Laravel/eloquent|Eloquent]]. | ||
بالطبع، تعمل جميع المجموعات كمكررات، مما يمكّنك من المرور على عناصرها وكأنها مصفوفات عادية:<syntaxhighlight lang="php"> | بالطبع، تعمل جميع المجموعات كمكررات، مما يمكّنك من المرور على عناصرها وكأنها مصفوفات عادية:<syntaxhighlight lang="php"> | ||
سطر 18: | سطر 18: | ||
return $user->name; | return $user->name; | ||
}); | }); | ||
</syntaxhighlight>'''ملاحظة:''' بينما تعيد معظم توابع مجموعات Eloquent كائنا جديدا من صنف مجموعة | </syntaxhighlight>'''ملاحظة:''' بينما تعيد معظم توابع مجموعات [[Laravel/eloquent|Eloquent]] كائنا جديدا من صنف مجموعة [[Laravel/eloquent|Eloquent]]، تعيد التوابع <code>pluck</code> و <code>keys</code> و <code>zip</code> و <code>collapse</code> و <code>flatten</code> و <code>flip</code> كائنا من [[Laravel/collections|الصنف الأساسي للمجموعات]]. بالمثل، إذا أعاد التابع <code>map</code> مجموعة لا تحوي أي كائن من نموذج [[Laravel/eloquent|Eloquent]]، سيتم تحويله تلقائيًّا إلى الصنف الأساسي. | ||
== التوابع المتاحة == | == التوابع المتاحة == | ||
=== الصنف الأساسي للمجموعات === | === الصنف الأساسي للمجموعات === | ||
كما ذُكر، جميع مجموعات Eloquent ترث من الصنف الأساسي لمجموعات | كما ذُكر، جميع مجموعات [[Laravel/eloquent|Eloquent]] ترث من الصنف الأساسي لمجموعات [[Laravel]]؛ وبالتالي، تزوّد جميع التوابع القوية التي يزوّدها [[Laravel/collections|الصنف الأساسي للمجموعات]]. | ||
== المجموعات المخصصة == | == المجموعات المخصصة == |
مراجعة 00:29، 19 أكتوبر 2018
مقدمة
إنّ جميع مجموعات النتائج المتعددة المعادة من Eloquent هي كائنات من الصنف Illuminate\Database\Eloquent\Collection
، بما فيها النتائج المستردة من التابع get
أو من العلاقات. يرث صنف مجموعة Eloquent من الصنف الأساسي لمجموعة Laravel، وبالتالي ترث هذه المجموعات الكثير من التوابع التي تساعد بالعمل مع المصفوفات المستخدمة مع نماذج Eloquent.
بالطبع، تعمل جميع المجموعات كمكررات، مما يمكّنك من المرور على عناصرها وكأنها مصفوفات عادية:
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
لكنّ المجموعات أقوى بكثير من المصفوفات، إذ تزود الكثير من عمليات التقليص والتجميع التي يمكن سلسلتها ضمن واجهة متطورة. مثلاً، لنحذف جميع السجلات غير النشطة ونجمع الاسم الأول لكل من المستخدمين المتبقيين:
$users = App\User::all();
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
ملاحظة: بينما تعيد معظم توابع مجموعات Eloquent كائنا جديدا من صنف مجموعة Eloquent، تعيد التوابع pluck
و keys
و zip
و collapse
و flatten
و flip
كائنا من الصنف الأساسي للمجموعات. بالمثل، إذا أعاد التابع map
مجموعة لا تحوي أي كائن من نموذج Eloquent، سيتم تحويله تلقائيًّا إلى الصنف الأساسي.
التوابع المتاحة
الصنف الأساسي للمجموعات
كما ذُكر، جميع مجموعات Eloquent ترث من الصنف الأساسي لمجموعات Laravel؛ وبالتالي، تزوّد جميع التوابع القوية التي يزوّدها الصنف الأساسي للمجموعات.
المجموعات المخصصة
إذا أردت استخدام كائن مخصص من الصنف Collection
مع توابعك المخصصة الخاصة، يمكنك إعادة تعيين التابع newCollection
على صنف نموذجك:
<?php
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* إنشاء كائن جديد من صنف مجموعة Eloquent.
*
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
}
بعد تعريف التابع newCollection
، ستتلقى كائنًا من مجموعتك المخصصة عندما يعيد Eloquent كائن Collection
من ذلك النموذج. إذا أردت استخدام صنف Collection
مخصص لكل نماذجك، عرّف التابع newCollection
على صنف نموذج أساسي الذي ترثه جميع نماذجك.