Laravel 4.2和AngularJS将数据插入到多个表中,其中Table_1中的PK是表2和表_3中的FK

问题描述 投票:0回答:1

我是Laravel的新手,目前正在努力学习如何运作。我使用的是一个使用Laravel和AngularJS的项目。我目前正在尝试将数据插入到AngularJS中的一个不同的表中,我可以很好地获取值,但我不明白如何将数据插入到多个表中。我在Table_1中也有一个PK,它在Table_2和Table_3中也是FK,我也需要插入它。我一直试图想出这个安静的一段时间,我真的需要一些帮助。

如果您需要任何关于结构的任何其他信息或任何问题,我将提供它不确定您需要看到什么:s

最好的问候凯文! :)

编辑:

所以我在AngularJS中有一个表单,如下所示:

form.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打电话:

Controller.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的表中,其中FK是TravelbillId,我想要的关系是Cost上的一对一或Allowance上的一对多和一对一<?php use Illuminate\Auth\UserTrait; use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableTrait; use Illuminate\Auth\Reminders\RemindableInterface; 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'); } }

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

UserModel.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');
    }
  }

 ?>

TravelbillModel.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');
    }
  }


 ?>

CostModel.php

$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);
php angularjs laravel
1个回答
0
投票

看起来你已经在很大程度上完成了你的模型,虽然没有数据库模式,但很难说100%。基本上,您需要做的是保存并关联记录集,首先是Travelbill,然后是相关的成本和津贴。

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

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

qazxswpoi

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

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

© www.soinside.com 2019 - 2024. All rights reserved.