بخش سوم - روابط - قسمت هفتم
متد های روابط
1- متد with
برای Eager Loading روابط استفاده میشود. با استفاده از این متد، میتوانید قبل از اجرای کوئری و دریافت نتایج، تمام روابط مرتبط با مدل را نیز بهطور پیشفرض بارگذاری کنید.
$posts = Post::with('comments')->get();این کد همه پستها را به همراه نظرات (comments) مرتبط با آنها در یک کوئری بارگذاری میکند. (comments نام رابطه تعریف شده می باشد)
2- متد withCount
تعداد رکوردهای مرتبط با هر رکورد از مدل اصلی را بدون بارگذاری کامل رابطه محاسبه میکند. این متد تعداد رکوردهای مرتبط را به عنوان یک ستون اضافی برمیگرداند.
3- متد withMax
مقدار بیشینه یک فیلد از رکوردهای مرتبط را محاسبه میکند.
4- متد withAvg
مقدار میانگین یک فیلد از رکوردهای مرتبط را محاسبه میکند.
5- متد withSum
مقدار جمع یک فیلد از رکوردهای مرتبط را محاسبه میکند.
6- متد withExists
بررسی میکند که آیا یک رابطه مرتبط وجود دارد یا خیر، و این نتیجه را به عنوان یک ستون exists برمیگرداند.
7- متد without
برای غیرفعال کردن بارگذاری یک رابطه خاص که قبلاً در یک اسکوپ یا کوئری دیگر بارگذاری شده است استفاده میشود.
$posts = Post::without('comments')->get();8- متد withOnly
فقط روابط خاصی که مشخص شدهاند را بارگذاری میکند، حتی اگر اسکوپهای دیگر در حال بارگذاری روابط دیگر باشند.
$posts = Post::withOnly('comments')->get();9- متد withWhereHas
برای بارگذاری روابط همراه با یک شرط خاص روی رکوردهای آن رابطه استفاده میشود.
$posts = Post::withWhereHas('comments', function ($query) {
$query->where('likes', '>', 10);
})->get();این کد پستهایی را بارگذاری میکند که نظرات آنها بیش از 10 لایک دارند.
10- متد morphWithCount
برای بارگذاری رابطههای چندشکلی به همراه شمارش رکوردهای مرتبط استفاده میشود.
$users = User::morphWithCount([Post::class => ['comments']])->get();
این کد رابطههای چندشکلی را با شمارش تعداد نظرات در پستها برای هر کاربر بارگذاری میکند.
11- متد load
برای Lazy Loading استفاده میشود. این متد پس از اجرای کوئری اصلی، روابط مرتبط را بارگذاری میکند.
$post = Post::find(1);
$post->load('comments');
12- متد loadMissing
روابطی که قبلاً بارگذاری نشدهاند را بارگذاری میکند. اگر یک رابطه قبلاً بارگذاری شده باشد، این متد دوباره آن را بارگذاری نمیکند.
13- متد loadCount
برای بارگذاری تعداد رکوردهای مرتبط با مدل اصلی استفاده میشود، بدون اینکه رابطه بهطور کامل بارگذاری شود.
14- متد loadMorph
برای بارگذاری روابط چندشکلی (Polymorphic) استفاده میشود و به شما اجازه میدهد که رابطههای چندشکلی خاصی را بارگذاری کنید.
$comment = Comment::find(1);
$comment->loadMorph('commentable', [Post::class => ['comments'], Video::class => ['likes']]);
این کد بارگذاری چندشکلی را برای رابطه commentable انجام میدهد و روابط comments برای پستها و likes برای ویدئوها بارگذاری میشود.
15- متد loadMorphCount
تعداد رکوردهای مرتبط در رابطههای چندشکلی را بدون بارگذاری کامل آنها محاسبه میکند.
$comment = Comment::find(1);
$comment->loadMorphCount('commentable', [Post::class => ['comments'], Video::class => ['likes']]);
این کد تعداد نظرات برای پستها و تعداد لایکها برای ویدئوها را برای هر نظر به صورت چندشکلی بارگذاری میکند.
16- متد loadSum
برای محاسبه جمع یک ستون خاص در رابطههای مرتبط استفاده میشود.
$post = Post::find(1);
$post->loadSum('comments', 'likes');
17- متد has
برای اعمال شرط بر اساس وجود یا عدم وجود رکوردهای مرتبط استفاده میشود. در واقع، این متد پستهایی را برمیگرداند که رابطهی مشخصی دارند.
$posts = Post::has('comments')->get();18- متد orHas
به عنوان جایگزین OR در کوئری برای چک کردن وجود رکوردهای مرتبط استفاده میشود.
$posts = Post::has('comments')->orHas('likes')->get();19- متد resolveRelationUsing
برای بازنویسی نحوهی استفاده از یک رابطه به صورت دلخواه در لاراول استفاده میشود. با استفاده از این متد، شما میتوانید تعریف سفارشی از یک رابطه را در مدل خود پیادهسازی کنید.
User::resolveRelationUsing('profile', function ($model) {
return $model->hasOne(Profile::class);
});این کد نحوه بارگذاری رابطه profile را برای مدل User بازنویسی میکند.
▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.