Php 使用多个型号时保持功能干燥

Php 使用多个型号时保持功能干燥,php,laravel-4,Php,Laravel 4,我目前有一系列库存系统模型,其中一个模型中有一个函数,用于处理向产品添加变体: public function addVariant($options, $values = array()) { // Clone parent $variant = $this->replicate(); // Update values for the cloned item if (count($values)) $this->updateValues($vari

我目前有一系列库存系统模型,其中一个模型中有一个函数,用于处理向产品添加变体:

public function addVariant($options, $values = array())
{
    // Clone parent
    $variant = $this->replicate();

    // Update values for the cloned item
    if (count($values)) $this->updateValues($variant, $values);
    $variant->save();

    // Add options
    foreach ($options as $option) InventoryItemOption::addVariation($variant, $option);
}

private function updateValues($variant, $values)
{
    // Loop through the values and if the key exists, update the value
    foreach ($values as $key => $value) if (isset($variant->$key)) $variant->$key = $value;

    return $variant;
}
作为addVariant的一部分,它通过InventoryItemOption中的AddVariance添加实际变量:

应该如何以一种枯燥的方式来处理这个问题,在本例中不一定如此,但任何跨多个模型的函数都应该如此。这是辅助函数应该使用的地方吗

我想验证updateValues之后传递的数据,如果没有验证,则返回一个失败,但我还想验证通过addVariation添加的每个变体是否有效并存在于数据库中,我可以使用验证器进行验证,但我不确定一个模型是否应该首先调用另一个模型


我不想编写多个函数,这些函数做相同的事情来添加变体,因此需要集中在某个地方,但随着我编写更多函数,我注意到这种跨模型函数调用正在越来越多地发生。

Laravel使事情变得简单,但需要一点创造力。您可以将BaseModel置于以下两者之间,而不是扩展雄辩的模型:

抽象类BaseModel扩展了雄辩的{ 公共函数write$input,$key='id' { //实例化对象 如果!空$input[$key] $resource=$this->findOrFail$input[$key]; 其他的 $resource=$this; //使用体量指定使用用户输入填充对象 $resource->fill$input; //将数据保存到数据库 如果!$resource->save 应用程序::abort500,“无法保存资源”; 返回$resource; } 类变量扩展了BaseModel{ } 然后,在变量模型或任何其他模型上,您可以设置受保护的$fillable属性。要在模型上插入/更新值,您只需从控制器调用以下命令:

//实例化模型 $resource=新变量; //将数据写入模型 $transaction=$resource->write$input;
此外,您可以对BaseController使用相同的技术,这样您的控制器也将保持干燥。

与论坛网站不同,我们不使用感谢、感谢的帮助或签名。请参阅。
public static function addVariation($item, $variation)
{
    $option = new InventoryItemOption;
    $option->item_id = $item->id;
    $option->option_id = $variation;
    $option->save();

    return $option;
}