Я пытаюсь создать небольшую систему с двумя моделями: Product
, ProductPrice
.Получите родителя от ребенка в Laravel без дополнительного запроса
Вот модель продукта:
class Product extends Model
{
protected $with = ['prices'];
public $tax_rate = 0.2;
public function prices()
{
return $this->hasMany(ProductPrice::class);
}
}
Я положил константу tax_rate
здесь для большей ясности, но в реальном мире, он обрабатывается другим отношением.
Самое главное здесь в том, что tax_rate
является собственностью Product
модели
Вот это ProductPrice
модель:
class ProductPrice extends Model
{
protected $appends = ['tax_included_price'];
public function getTaxIncludedPriceAttribute()
{
return (1 + $this->product->tax_rate) * $this->price;
}
public function product()
{
return $this->belongsTo(Product::class);
}
}
Теперь давайте представим, что мне нужно использовать $product->toArray()
на некоторых модель. В этом примере я получу цикл исключения для бесконечного цикла, потому что мой метод getTaxIncludedPriceAttribute()
делает новый запрос для поиска атрибута product
.
Так я мог получить доступ к Product
родителей в ProductPrice
модели, если я к нему доступ через родителей, и без дополнительного запроса