Laravel 5 一对多关系主父数据CRUD

Laravel 5 One-to-many relationship master and parent data CRUD

我有一个带有日期和评论的购买 table 和一个带有 purchaseId 作为购买外键的 purchasedetail table table。两个模型中的关系 table 是:

购买型号:-

use Illuminate\Database\Eloquent\Model;
class Purchase extends Model {
public function purchasedetails() {
    return $this->hasMany('App\Models\Purchasedetail', 'PurchaseId', 'Id');
}
  }


采购详情型号:-

use Illuminate\Database\Eloquent\Model;
class Purchasedetail extends Model {
public function purchase() {
    return $this->belongsTo('App\Models\Purchase', 'PurchaseId', 'Id');
}
}

如何创建、更新和删除具有关系的 table 数据? 我的主要问题是当我将数据发送到控制器并尝试创建时,创建了母版页数据但它无法创建父 table 数据或更新它。 我正在使用 Laravel 5.

我的控制器的一些代码:

$purchase = new Purchase();
    $purchase->Date = Input::get('Date');
    $purchase->Comment = Input::get('Comment');
    $purchase->purchasedetails = Input::get('Purchasedetail');
$purchase-> save();

if (count($purchase->purchasedetails) != 0) {
foreach ($purchase->purchasedetails as $v) {
    $purchasedetail = new Purchasedetail();
    $purchasedetail->ItemId = $v->ItemId;
return $v->ItemId;
    }
}
$purchase-> Purchasedetail()->save($purchasedetail);

我在 return 中收到此错误:

ErrorException in helpers.php line 703: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array. That means $purchase->save() can not possible. Here i get an array list from Input::get('Purchasedetail').

那我现在该怎么办?

我现在确定了,但你可以这样做。

 $purchase = new Purchase();
 ...
 $purchaseDetails = new PurchaseDetails();
 $purchaseDetails->purchaseId = $purchase->id;
 $purchaseDetails->save();

尝试以下操作:

$purchase = new Purchase();
$purchase->Date = Input::get('Date');
$purchase->Comment = Input::get('Comment');

$purchase-> save();

$purchase->purchasedetails = Input::get('Purchasedetail');
foreach ($purchase->purchasedetails as $row) {
    $purchasedetail = new Purchasedetail();
    $purchasedetail->ItemId = $row['ItemId'];
    $purchasedetail->GradeId = $row['GradeId'];
    $purchasedetail->Quantity = $row['Quantity'];
    $purchase->purchasedetails()->save($purchasedetail);
}