نمایش اطلاعات در لاراول

2 هفته پیش
توسط علی بیات آپدیت شد
Armin Rahmati ( 360 تجربه )
2 هفته پیش

سلام دوستان.
من تو سایتم دو تا کاربر دارم که یکی میتونه محصولات شرکتشو بزار و اون فرد بیاد محصولات رو نگاه کنه.
به عنوان مثال وقتی هر شرکت محصولشو ادد میکنه، داخل کنترلر این کدو مینویسم که به اون شرکت محصولات خودش فقط بهش نشون داده بشه و محصولات شرکت های دیگه بهش نشون داده نشه.
;products = auth()->user()->Product()->latest()->paginate(20)$
حالا برای اینکه تو صفحه اصلی سایت وقتی افراد میان و روی هر شرکت کلیک میکنن و میخوان ببینن که هر شرکت چه محصولاتی داره به جای کد بالا چه کدی باید قرار داد؟
وقتی کد زیر رو قرار میدم واسه همه ی شرکت ها همه محصولات رو نشون میده، که من میخوام برای هر شرکت فقط محصولات خودش رو نشون بده.
;products = Product::latest()->paginate(20)$

Seyyed Mojtaba Hoseyni ( 4230 تجربه )
2 هفته پیش

سلام
برای این کار شما میتونید از دستور where استفاده کنید.

$products = Product::where('company_id',$id)->paginate(20)

که اون $id آیدی همون شرکت هستش
البته شما میتونید به جای id از موارد دیگه ای هم استفاده کنید.

روش دوم استفاده از route model binding هستش به صورت زیر:

public function getProducts(Company $company){
    $products=$company->products()->paginate(20);
}
Armin Rahmati ( 360 تجربه )
2 هفته پیش

@SMH118
از روش دوم استفاده کردم ولی هیچی نشون نمیده.

Seyyed Mojtaba Hoseyni ( 4230 تجربه )
2 هفته پیش

دقت کنید که در route شما، باید پارامترش وجود داشته باشه به صورت زیر:

Route::get('/someurl/{company}','SomeController@getProducts');

مطمئن بشید که مقداری در دیتابیس وجود داشته باشه.
رابطه بین محصول و شرکت رو هم برسی کنید که درست باشه.
@arminrahmati999

علی بیات ( 265157 تجربه )
2 هفته پیش
تخصص : توسعه دهنده ارشد وب

یک مدل Company بسازید
و بین این مدل و Products رابطه الکوئنت رو بوجود بیارید و خیلی راحت محصولات مربوط به شرکت رو دریافت کنید
حتی میتونید Eager load هم بکنید که کوئری ها بهینه بشند
چیزی شبیه زیر:

$company = Company::find($company_id);
$company->load('products')->paginate(20);
برای ارسال پاسخ باید وارد سایت شوید