Armin Rahmati
5 سال پیش توسط Armin Rahmati مطرح شد
6 پاسخ

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

سلام دوستان.
من یه سایت دارم که دو نوع کاربر داره.
یک نوع کاربر (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
@m.momeni9283 5 سال پیش مطرح شد
0

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


Armin Rahmati
@arminrahmati999 5 سال پیش مطرح شد
0

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


thrashzone13
تخصص : PHP Laravel Developer
@thrashzone13 5 سال پیش مطرح شد
0

سلام خب اینکه کاری نداره شما همه 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
@arminrahmati999 5 سال پیش آپدیت شد
0

@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'));
    }

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

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

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

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

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

filtering آپشنال هست

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


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام