Чтобы проиллюстрировать то, что я ищу, я создам простой сценарий.
У меня есть customer
, product
, price
, cart
и cart_item
и admin
. Цена имеет глобальную область, которая ограничивает результаты гостем и конкретным идентификатором пользователя. Проблема возникает, когда администратор хочет просмотреть корзину какого-либо клиента. Потому что тогда глобальная сфера бесполезна.
class Product extends Model {
public function prices() {
return $this->hasMany(Price::class);
}
public function getPriceAttribute() {
// do some business logic
return $price;
}
}
class Price extends Model {
protected static function boot() {
parent::boot();
self::addGlobalScope('customer', function ($query) {
$query->whereNull('customer_id'); // public prices
if (Auth::user()) {
$query->orWhere('customer_id', '=', Auth::user()->id);
}
}
}
}
class CartItem extends Model {
public function product() {
return $this->belongsTo(Product::class);
}
// cart Item does not store price. Only amount and product id
public function getSumAttribute() {
return $this->quantity * $this->product->price; // float is not production code, just to illustrate
}
}
Я ищу правильный способ сделать это. Контроллер имеет что-то вроде этого
$cart = Cart::with('items.product.prices')->find($id);
Могу ли я сделать что-то вроде? пользователя. И пусть модель Прайса использует эту переменную вместо Auth :: user ().
Я также видел пакеты олицетворения для Laravel.
Но оба эти подхода бесполезны, если я выбираю Cartsот нескольких пользователей.