У меня четыре модели: User
, Product
, Order
, OrderItem
Когда User
добавляет товар в свою корзину, создается новый Order
, а товар становится новым OrderItem
.
Столы:
users
id - integer
name - string
products
id - integer
name - string
orders
id - integer
user_id - integer
paid - boolean
order_items
order_id - integer
product_id - integer
quantity -integer
price - double
Отношения:
`Product` hasMany `OrderItem`
`OrderItem` belongsTo `Order`
`OrderItem` belongsTo `Product`
`Order` hasMany `OrderItem`
`User` hasMany `Order`
Я хочу иметь возможность перечислить все Product
и под каждым всех User
, купивших этот Product
(Order whereNotNull 'paid'
). И наоборот, я хотел бы показать User
все Product
, которые они купили.
Я пробовал делать это поэтапно с отношениями. Я могу заставить {{ $product->orderItems }}
работать, но не {{ $product->orderItems->orders }}
Laravel не разрешает отношения hasManyThrough со сводной таблицей, что, по сути, и есть order_items
, так что это не сработает.
Возможно, я мог бы сделать это с помощью Accessor с соединением, но я не могу понять это, потому что я не могу установить отношения.
Может быть, пользовательская коллекция Eloquent, чтобы каждый раз, когда я вызываю Product
, в ней уже были все оплаченные User
, и каждый раз, когда я вызываю User
, в коллекции уже будут все его Product
?