Laravel 4.2 & AngularJS Вставить данные в несколько таблиц, где PK в Table_1 - это FK в Table_2 & Table_3 - PullRequest
0 голосов
/ 05 сентября 2018

Я очень новичок в Laravel и сейчас пытаюсь узнать, как он работает. Я работаю с проектом, в котором мы используем Laravel и AngularJS. В настоящее время я пытаюсь вставить данные в 3 разные таблицы из одной из AngularJS, я могу получить значения просто отлично, но я не понимаю, как я могу вставить данные в несколько таблиц. У меня также есть PK в Table_1, который является FK в Table_2 и Table_3, который мне также нужно вставить. Я пытался понять это некоторое время, и мне действительно нужна помощь.

Если вам нужна какая-либо дополнительная информация о структуре или что-то еще, просто спросите, и я предоставлю ее, не уверен, что вам нужно увидеть: s

С наилучшими пожеланиями Кевин! :)

EDIT:

Итак, у меня есть форма в 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>

Оттуда я звоню своему Ларавеллу с контроллером:

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, который является инкрементным значением в базе данных, в таблицу с именами Cost и Allowance, где FK равен TravelbillId, отношения, которые я хочу, это либо один к одному на оба или один ко многим в Cost и один в один в Allowance.

У меня также есть некоторые модели, но я не уверен, что они написаны правильно.

UserModel.php

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


}

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

 ?>

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


 ?>

1 Ответ

0 голосов
/ 05 сентября 2018

Похоже, вы в значительной степени правильно выполнили свои модели, хотя без схемы базы данных сложно сказать 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.

Сначала освоитесь с любым подходом, а затем, возможно, вам захочется взглянуть на обертывание всего набора моделей, сохраняемого в транзакции базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...