این وب سایت با تمامی محتویات و دامین به فروش می رسد. لطفا جهت خریداری از طریق بخش ارتباط با ما در تماس باشید

جستجو ...


هدف ما این است که شما، در بالاترین سطح برنامه نویسی و توسعه وب باشید.

ثبت نام کنید

در لاراول راه های بسیار زیادی برای فیلتر کردن پرس و جوهایی که به صورت رابطه ای هستند وجود دارد ولی ما در این مقاله سعی داریم که بهترین راه و انعطاف پذیرترین راه ممکن را به شما یاد دهیم.


سلام دوستان، مدتی است که سعی دارم نکات کوچکی که کشف میکنم را به اشتراک بگذارم تا شما عزیزان هم از این نکات مفید استفاده کنید. نکته ای که امروز به شما یاد میدهم همانند مقالات قبلی بنده مربوط به بخش Eloquent ها در لاراول است که می تواند در بسیاری از موارد به شما کمک فراوانی کند، با ما همراه باشید.

مثال زیر یک رابطه ساده با استفاده از Eloquent ها است :

class Author extends Model 
{
  public function books()
  {
    return $this->hasMany(Book::class);
  }
}

 در مثال زیر نحوه واکشی داده ها را در Controller مشاهده می کنیم:

$authors = Author::all();
foreach ($authors as $author) {
  foreach ($author->books as $book) {
  // .. do something
  }
}

نکته : اگر بخواهیم فقط کتاب های نوشته شده در سال جاری را دریافت کنیم چه باید کرد؟ بسیار ساده است ، کافیه رابطه اصلی را به شکل زیر تغییر دهید:

public function books()
{
    return $this->hasMany(Book::class)->whereYear('books.created_at', date('Y'));
}

البته شما میتوانید برای از بین نبردن رابطه اصلی از یک رابطه جداگانه همانند زیر استفاده کنید :

public function books()
{
    return $this->hasMany(Book::class);
}

public function booksThisYear()
{
    return $this->hasMany(Book::class)->whereYear('books.created_at', date('Y'));
}

و اینگونه داده ها را دریافت کنید :

foreach ($author->booksThisYear() as $book) ...

اما استفاده از روش بالا انعطاف پذیر نیست، بنابراین از راه دیگری برای فیلتر پرس و جوها استفاده می کنیم:

$authors = Author::with(['books' => function($query) {
  $query->whereYear('created_at', date('Y'));
}])->get();

به نظر من این راه انعطاف پذیر ترین است چون ارتباط اصلی باقی خواهد ماند .

بیشتر بخوانید:

شروع کار با Eloquent ها در لاراول

نکته مهم : اگر شما بخواهید در کد فیلتر پرس و جو از متغیرهای خارجی استفاده کنید باید آنها را با استفاده از use به کوئری اضافه کنید.

 برای پرس وجو زیر از متغیر خارجی  $year استفاده می کنیم :

$year = 2018; // Feels weird writing it on January 2, still getting used to 2018
$authors = Author::with(['books' => function($query) {
  $query->whereYear('created_at', $year);
}])->get();

اگر شما از کد بالا استفاده کنید خروجی شما با خطا مواجه می شود، چون متغیر $year بیرون از محدوده پرس و جو تعریف شده، پس برای رفع این مشکل از روش زیر استفاده میکنیم :

$year = 2018; 
$authors = Author::with(['books' => function($query) use ($year) {
  $query->whereYear('created_at', $year);
}])->get();

 بیشتر بخوانید:

آموزش پایه لاراول ۵,۵

امیدوارم که این نکات برای شما مفید باشد، تا نکات بعدی با لیداوب همراه باشید.


 مطالب مرتبط  

در قسمت زیر مطالبی وجود دارند که با مقاله فعلی مرتبط هستند

متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

برترین های