Как разделить заказы между продавцами и покупателями Laravel? - PullRequest
0 голосов
/ 13 июня 2019

Я создаю платформу, где пользователь может зарегистрироваться и добавлять товары для продажи.Также другой пользователь может купить перечисленные продукты.Когда покупатель размещает заказ, я хочу, чтобы его увидел продавец (пользователь), который перечислил товар.Прямо сейчас все пользователи могут видеть все заказы, даже если они не являются продавцами.

Я не знаю, как поступить, но вот моя

функция заказа в контроллере продукта

 //Orders View Function
public function viewOrders(){
    $orders = Order::with('orders')->orderBy('id','Desc')->get();
    return view('orders')->with(compact('orders'));
 }

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 14 июня 2019

Отфильтруйте базу запросов по вашим потребностям

Пример:

Модель отношений

public function orders(){
    return $this->hasMany(Order::class);
}
public function getMyOrders(User $user){
    $orders = Order::with('orders')->orderBy('id','Desc')->where('user_id','=', $user->id)->get();
return view('orders')->with(compact('orders'));
}

Чтобы получить продавцов Заказы

public function getSellerOrders(User $user){
    $products = Product::where('user_id', '=', $user->id)->get();
    $orders = [];
    foreach($products as $product){
        array_merge($orders, $product->order);
    }
    return view('orders')->with(compact('orders'));
}
0 голосов
/ 04 июля 2019

В вашей таблице БД для orders предлагается 2 идентификатора, один из которых обозначает покупателя, а другой - продавца, т. Е. Всякий раз, когда пользователь размещает заказ, он должен быть покупателем, а затем вставить его (покупателя). Идентификатор в buyer_id в таблице Заказа, аналогично product_id для обозначения продукта из Таблицы продуктов должен быть там, а из Таблицы продуктов вы можете получить seller_id, что предлагается для обозначения того, какой продавец владеет конкретным продуктом. Вставьте seller_id в таблицу заказа и используйте его для запроса как:

$seller = Order::where('seller_id',$variable_for_product_id)->with('orders')->get();

Сделайте это для всех продавцов в Таблице вашего заказа.

0 голосов
/ 14 июня 2019

Ваше действие viewOrders должно быть скрыто за процессом аутентификации (очевидно, пользователь должен сначала войти в систему, прежде чем он сможет просмотреть свои заказы).Как только вы это сделаете (используя промежуточное программное обеспечение auth для своего маршрута), Laravel может разрешить для вас аутентифицированного пользователя - вы можете просто указать его как параметр вашего действия viewOrders:

public function viewOrders(User $user)
{
    $orders = $user->orders()->orderBy('id', 'desc')->get();

    return view('orders')->with(compact('orders'));
}

Как вы заметилиЗдесь я немного изменил ваш запрос.Вместо выбора всех заказов мы теперь выбираем их через аутентифицированного пользователя с отношением к его заказам.Заказы, очевидно, принадлежат пользователю, но через продукты (как промежуточное звено) - у одного пользователя может быть много продуктов, у одного продукта может быть много заказов, таким образом, у одного пользователя может быть много заказов.В Laravel такого рода отношения между красноречивыми моделями называются HasManyThrough .Поэтому вы должны объявить это в вашей User модели:

class User extends Model {
    ...

    public function orders()
    {
        return $this->hasManyThrough(Order::class, Product::class);
    }
}

Обратите внимание, что ваш Product, вероятно, также будет иметь отношение orders(), но вместо этого он будет иметь тип HasMany, так как он является прямымодин без промежуточных звеньев.

...