AngularJS & Laravel 4.2 извлекает данные из нескольких таблиц и объединяет их - PullRequest
0 голосов
/ 06 сентября 2018

Я недавно начал работать с Laravel и только недавно получил помощь для вставки данных в несколько таблиц с одного контроллера. Теперь я пытаюсь извлечь данные из базы данных и заполнить форму, если требуется редактирование или кто-то должен просмотреть данные, чтобы убедиться, что они верны. Я не понимаю, как я присоединяюсь к таблицам, это в модели в Laravel? Или мне нужно создать SQL-запрос на соединение?

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

 ?>

Модель Cost.php

<?php

  class Cost extends Eloquent {

    protected $table = 'cost';
    protected $primaryKey = 'CostId';
    // protected $fillable = array('TravelbillId', 'Description', 'DescriptionByHiq', 'SekInklMoms', 'SekExklMoms', 'SekInklMomsByHiq', 'SekExklMomsByHiq', 'Currency', 'ExchangeRate');
    protected $fillable = array('TravelbillId', 'Description', 'DescriptionByHiq', 'SekInklMoms', 'SekMoms', 'SekInklMomsByHiq', 'SekMomsByHiq', 'Currency', 'ExchangeRate');
    public $timestamps = false;

    public function cost() {
      return $this->belongsTo('Travelbill', 'TravelbillId', 'TravelbillId');
    }
  }


 ?>

Модель Allowance.php

<?php

  class Allowance extends Eloquent {

    protected $table = 'allowance';
    protected $primaryKey = 'AllowanceId';
    protected $fillable = array('TravelbillId', 'DayAllowance', 'Breakfast', 'Lunch', 'Dinner');
    public $timestamps = false;

    public function allowance() {
      return $this->belongsTo('Travelbill', 'TravelbillId', 'TravelbillId');
    }
  }


 ?>

Или где я делаю это объединение, поэтому, если я получу накладную, он также получит данные о затратах и ​​пособиях вместе с запросом?

EDIT:
Мне нужно внести данные в мою форму AngularJS, поэтому, если человек с id = 1 должен отредактировать свою накладную, он должен иметь возможность нажать кнопку редактирования и посмотреть информацию, которую он заполнил.

1 Ответ

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

Простейшая форма поиска данных, которую вы можете сделать здесь, это выполнить следующее:

$travelBills = Travelbill::with(['code','allowance'])->get();

Это Eager Loading и выполнит три запроса:

  • Загрузить все накладные
  • Загрузить все коды с внешними ключами, соответствующими всем идентификаторам накладной, и назначить их каждой модели командировки
  • Сделайте то же самое с надбавками

В итоге вы получите, что каждая модель Travelbill уже будет иметь связанную модель Code and Allowance, позволяющую вам работать следующим образом:

echo $travelBill->cost->SekInklMoms;

для одной из загруженных вами накладных. Обратите внимание на пару вещей в первом запросе:

  • Счета за проезд не отфильтрованы, мы загружаем их все на этом этапе.
  • Мы делаем это просто , не обязательно эффективно. Я рекомендую сначала освоиться с загрузкой отношений, прежде чем переходить к таким вещам, как объединения (которые в любом случае нарушают дух Eloquent ORM)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...