Laravel 5.6 Создание нескольких отношений - PullRequest
0 голосов
/ 27 августа 2018

Привет, у меня сложный вопрос. Я работаю с Laravel всего неделю. И я стараюсь создавать прайс-листы для клиентов.

У меня есть 5 таблиц:

price_lists:
  id
  title

---------------------------
price_lists_products:
  id
  product_id
  price_lists_id
  price
  percent

---------------------------
price_lists_users:
  id
  user_id
  price_lists_id

---------------------------
products:
  id
  title
  price
---------------------------
users:
  id
  name

И я должен собрать их так:

Есть несколько прайс-листов

Каждый прайс-лист связан с продуктами + цена

Каждый пользователь может связать до 5 прайс-листов

В представлении товара и в списке мне нужно показать пользователю товар с самой низкой ценой, которая установлена ​​для него в прайс-листах

Например:

У меня есть книга, которая принадлежит 5 разным прайс-листам и каждому прайс-листу, разные цены.

И есть пользователь, связанный с 3 прайс-листами.

Я хочу, чтобы пользователь получил самую низкую цену в прайс-листах, к которым он принадлежит

Надеюсь, это понятно, я понятия не имею, как к нему подойти, я был бы рад, если вы поможете мне с этим, спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Создание моделей для Product, PriceList и User.

В вашей модели Product создайте отношение "многие ко многим", чтобы получить коллекцию PriceList:

public function pricelists()
    {
        return $this->belongsToMany('App\PriceList')->withPivot('price', 'percent');
    }

В вашей модели PriceList создайте отношение "многие ко многим", чтобы получить коллекцию User:

public function users()
    {
        return $this->belongsToMany('App\User');
    }

Опять же, в модели Product вы можете получить самую дешевую цену, например:

// get the cheapest listing by user_id, you can set default to logged in user
public function cheapestprice($user_id){
    $this->pricelists->whereHas('users', function ($query) {
        $query->where('user_id', $user_id);
    })->orderBy('price_lists_products.price','ASC')->first()->price;
}

Наконец, с объектом Product вы можете получить самую дешевую цену:

Product::first()->cheapestprice(Auth::user()->id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...