框架: Laravel 5.1
背景:我有一个Product
和一个ProductVariation
模型,它们都具有ImplementsProductAttributes
的特征。如果Product
是变量,则产品至少应包含一个可购买的ProductVariation
才能进行购买,其余逻辑在来自特征的代码示例中将显而易见。功能按原样工作。
public function getPurchasableAttribute()
{
if ($this instanceof \App\Product)
{
if ($this->type == 'variable')
{
foreach ($this->variations as $variation)
{
if ($variation->purchasable)
return true;
}
return false;
}
else return $this->isItemPurchasable();
}
else
{
return $this->isItemPurchasable();
}
}
public function isItemPurchasable()
{
if($this->regular_price > 0 AND $this->published)
{
if ($this->manage_stock)
{
return $this->stock_quantity > 0;
}
else return $this->in_stock;
}
else return false;
}
优点:
缺点:
问题:我应该保留这种实现方式还是应该通过摆脱拉关系并进行简单的SQL查询以获取可购买的变体来进行改进?
请尽可能详细地说明您的答案。
编辑:如果您认为还有其他优点/缺点,也请告诉我。
答案 0 :(得分:0)
首先,根据编码标准的考虑,您可以像这样在getPurchasableAttribute()方法中摆脱这种嵌套的if-else结构
public function getPurchasableAttribute()
{
if (!( $this instanceof \App\Product) || $this->type != 'variable')
{
return $this->isItemPurchasable();
}
foreach ($this->variations as $variation)
{
if ($variation->purchasable)
return true;
}
return false;
}
能否请您谈谈有关$ variation-> purchasable
的更多信息可以购买在$ variation或$ variation属性中定义的雄辩的关系。
以便我们可以进一步谈论效率。