نمایش اطلاعات کاربر و محصولات در لاراول

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

سلام دوستان.
من یه سایت دارم که دو نوع کاربر داره.
یک نوع کاربر (admin) که محصولات خود را در سایت قرار میدهد و کاربر (user) دیگر که محصولات هر شرکت را مشاهده و در صورت نیاز سفارش میدهد.
کاربر (user) در پنل کاربری خود میتواند محصولاتی که از شرکت مشخص خرید کرده را مشاهده کند، که در زیر ویو و کنترلر آن را مشاهده میکنید.

@foreach($orders as $key=>$order)
                  <tr>
                      <td>{{ $key+1 }}</td>
                      <td>{{ $order->product->user->office }}</td>
                      <td>{{ $order->product->title }}</td>
                      <td>{{ $order->product->buyPrice }}</td>
                      <td>{{ $order->product->consumerPrice }}</td>
                  </tr>
               @endforeach
public function order() {
        $orders = auth()->user()->order()->latest()->paginate(10);
        return view('Home.panel.orders' , compact('orders'));
    }

ولی مشکلی که الان دارم اینه که چطور و با چه کدی در پنل کاربری (admin) هم نشون بدم که چه کاربرانی (user) چه محصولاتی از شرکت را خریداری کرده اند؟

maryam ( 980 تجربه )
2 ماه پیش

سلام
بین کاربران و محصولات رابطه تعریف کنید و از اون طریق اطلاعات رو بخونید و نمایش بدهید.
یک رابطه چند به چند(many to many) احیانا دارید.
,و برای خواندن اطلاعات هم اول کاربرانی که نقش user دارند رو واکشی کنید.

Armin Rahmati ( 360 تجربه )
2 ماه پیش

@m.momeni9283
کنترلر را باید به چه صورت بنویسم؟

thrashzone13 ( 12560 تجربه )
2 ماه پیش
تخصص : PHP Laravel Developer

سلام خب اینکه کاری نداره شما همه user ها رو به view ارسال میکنید و با استفاده از

$user->order()->get()

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

public function userOrders($userId){
    $orders = Order::where('user_id', $userId)->paginate(10);
    return view('user.order', compact('orders');
}
Armin Rahmati ( 360 تجربه )
2 ماه پیش

@thrashzone13
ببین الان من این ویو رو دارم

@foreach($orders as $order)
              <tr>
                  <td>{{ $order->user->firstName }}</td>
                  <td>{{ $order->user->lastName }}</td>
                  <td>{{ $order->user->office }}</td>
                  <td>{{ $order->title }}</td>
                  <td>{{ $order->user->address }}</td>
                  <td>{{ $order->user->phoneNumber }}</td>
              </tr>
          @endforeach
public function index() {

        $orders = Order::latest()->paginate(10);
        return view('Admin.orders.all' , compact('orders'));
    }

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

public function index() {

        $orders = auth()->user()->order()->latest()->paginate(10);
        return view('Admin.orders.all' , compact('orders'));
    }
سیدعلی موسوی ( 88616 تجربه )
2 ماه پیش
تخصص : سی شارپ و پی اچ پی

کوئری که در اخر آوردین اشتباهه!!
شما باید اول مدل رو بنویسن و سپس کوئری بزنین.
کلا نمیدونم ایا شما روابط رو ایجاد کردین فیلدهای جداول چی هستن!! بذاری بهتر راهنمایی میکنم

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

باید در این شرایط یه pivot table یا جدول میانی در کنار یک رابطه Many to Many (چند به چند) استفاده کنی..

وقتی کاربر محصولی رو میخره » id محصول و id یوزر در جدول ثبت میشند.

باید یه api به شکل زیر بوجود بیاری

$product->buyers()->filtering(..)->get();
$user->products()->filtering(..)->get();

filtering آپشنال هست

بعد که چنین روابطی در دسترس هستند، میشه راحت در پیج ادمین کاربر هارو + محصولاتشون رو Eager load کرد

برای ارسال پاسخ باید وارد سایت شوید