Laravel 4.2 & AngularJS 将数据插入多个表中,其中 PK in Table_1 是 FK in Table_2 & Table_3



我对Laravel很陌生,目前正在尝试了解它是如何工作的。我在一个项目中使用Laravel和AngularJS。我目前正在尝试将数据从 AngularJS 中的一个插入到 3 个不同的表中,我可以很好地获取值,但我不明白如何将数据插入多个表。我在Table_1中还有一个PK,它是Table_2中的FK,Table_3我也需要插入。我一直在试图解决这个问题一段时间,我真的需要一些帮助。

如果您需要有关结构或任何东西的任何其他信息,请询问,我会提供它,不确定您需要看到什么:s

此致敬意 凯文!:)

编辑:

所以我在 AngularJS 中有一个看起来像这样的表单:

形式.html

<tr>
<td>
<input class="form-control" id="currency" ng-model="travelbill.Currency" ng-init="travelbill.Currency ='SEK'" type="text" />
</td>
<td>
<input class="form-control" id="exchange_rate" ng-model="travelbill.Exchange_rate" type="number" />
</td>
<td>
<input class="form-control" id="description" ng-model="travelbill.Description"/>
</td>
<td>
<input class="form-control" id="sekinklmoms" ng-model="travelbill.SekInklMoms" type="number" />
</td>
<td>
<input class="form-control" id="sekmoms" ng-model="travelbill.SekMoms" type="number" />
</td>
<td>
</td>
</tr>

从那里我用控制器打电话给我的 Laravel:

控制器.php

class TravelbillController extends BaseController {

public function index() {
return Response::json(Travelbill::all());
}

public function store() {
$validator = Validator::make(
array(
'ResourceId' => Input::get('ResourceId')
),
array(
'ResourceId' => 'required'
)
);
if($validator->fails()){
App::abort(500, 'Validation Error!');
} else {
$travelbill = new Travelbill;
$travelbill->ResourceId = Input::get('ResourceId');
$travelbill->Destination = Input::get('Destination');
$travelbill->Customer = Input::get('Customer.Name');
$travelbill->StartDate = Input::get('StartDate');
$travelbill->StartTime = Input::get('StartTime');
$travelbill->EndDate = Input::get('EndDate');
$travelbill->EndTime = Input::get('EndTime');
$travelbill->Invoice = Input::get('Invoice');
$travelbill->TravelCompensation = Input::get('TravelCompensation');
$travelbill->save();

$response = Response::json($travelbill);
}
return $response;
}
}

从这里我还想将数据库中的增量值TravelbillId插入到一个名为CostAllowance的表中,其中 FKTravelbillId我想要的关系要么是一对一的,要么是Cost上的一对多,Allowance是一对一的。

我也有一些模型,但我不确定它们是否正确编写。

用户型号.php

<?php
use IlluminateAuthUserTrait;
use IlluminateAuthUserInterface;
use IlluminateAuthRemindersRemindableTrait;
use IlluminateAuthRemindersRemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
protected $table = 'resource';
protected $primaryKey = 'ResourceId';
public $timestamps = false;
public function supplier(){
return $this->belongsTo('Supplier', 'SupplierId', 'SupplierId');
}
public function resourceData(){
return $this->hasMany('OrderResourceData', 'ResourceId', 'ResourceId');
}
public function reportedTime(){
return $this->hasMany('ReportedTime', 'ResourceId', 'ResourceId');
}
public function approvements(){
return $this->hasMany('Approvement', 'ResourceId', 'ResourceId');
}

}

旅行单模型.php

<?php
class Travelbill extends Eloquent {
protected $table = 'travelbill';
protected $primaryKey = 'TravelbillId';
protected $fillable = array('ResourceId', 'Destination', 'StartDay', 'StartTime', 'EndDay', 'EndTime', 'Invoice', 'TravelCompensation');
public $timestamps = true;
public function travelbill() {
return $this->belongsTo('User', 'ResourceId', 'ResourceId');
}
public function cost() {
return $this->hasOne('Cost', 'TravelbillId', 'TravelbillId');
}
public function allowance() {
return $this->hasOne('Allowance', 'TravelbillId', 'TravelbillId');
}
}
?>

成本模型.php

<?php
class Cost extends Eloquent {
protected $table = 'cost';
protected $primaryKey = 'CostId';
protected $fillable = array('TravelbillId', 'SekInklMoms');
public $timestamps = false;
public function cost() {
return $this->belongsTo('Travelbill', 'TravelbillId', 'TravelbillId');
}
}

?>

看起来您在很大程度上已经正确完成了模型,尽管如果没有数据库架构,很难说 100%。基本上,您需要做的是保存并关联记录集,首先与旅行账单,然后是相关的成本津贴

$travelBill = new Travelbill();
$travelBill->ResourceId = Input::get('ResourceId');
...
$travelBill->save(); // This should populate the TravelbillId primary key
$cost = new Cost();
$cost->SekInklMoms = ...; // The value of SekInklMoms
// Save the cost to DB *and* associate the models
$travelBill->cost()->save($cost);
// The JSON will contain travelBill *and* cost due to the association above
return Response::json($travelbill);

这应该可以让您解决保存问题。这里要了解的重要一点是,您必须首先保存主模型,以便保存依赖于其存在的任何内容(即将外键与主模型相关联(。请记住,这也可以做到:

$travelBill->save();
$cost = new Cost();
$cost->SekInklMoms = ...;
$cost->TravelbillId = $travellBill->TravelbillId;
$cost->save();

这里的不同之处在于,您仅将两者关联到数据库中,而不是在此请求中关联模型。这意味着您返回的JSON中将只有TravelBill。

首先熟悉这两种方法,然后您可能需要考虑将整个模型保存集包装在数据库事务中。

最新更新