Laravel:如何在保存之前验证一个模型

时间:2015-08-15 04:38:30

标签: php laravel laravel-5 eloquent

例如,我有两个模型:

Product

ProductSpec

ProductSpec 产品的规范,您的主键与产品相同。

所以,当我去保存ProductSpec时,我会这样做:

$product = new Product;
$product->name = $name;
$product->save();

$productSpec = new ProductSpec;
$productSpec->product_id = $product->id;
$productSpec->value = $value;
$success = $productSpec->save();

// in case of ProductSpec validation errors
if ( $success !== true ) {
  $product->delete();
}

我的验证规则在模型中。问题是当我在 ProductSpec 保存时遇到一些验证错误时,应用程序将中止,我无法删除产品模型。

拜托,怎么解决这个问题?或者还有另一种方法可以验证ProductSpec,如果是,则保存吗?

1 个答案:

答案 0 :(得分:1)

您需要将这两个操作包装在一个数据库事务中。这样,要么保存两个对象,要么都不保存。

这样可以解决问题:

DB::transaction(function () use ($name, $value) {
  $product = new Product;
  $product->name = $name;
  $product->save();

  $productSpec = new ProductSpec;
  $productSpec->product()->associate($product);
  $productSpec->value = $value;
  $productSpec->save();
});

您可以在此处详细了解Eloquent中的交易:http://laravel.com/docs/5.1/database#database-transactions