Laravel Eloquent Присоединиться к нескольким столам - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть проблемы с моими красноречивыми объединениями.У меня есть 4 таблицы отношений

Таблица ссуд / Ссуды

 loan_id | quantity | user_id
 1       |   4      |   1   .

Подробная таблица ссуд / Loandetails

 loandetail_id | loan_id | inventory_id
 1             | 1       | 4          .

Таблица инвентаризации / Запасы

inventory_id  | name_inventory
  4           | Keyboard     .

Таблица пользователей / Пользователи

user_id  | Name
  1      | This is my name

Я хочу получить такой результат с красноречивыми запросами

{
   'loan_id' => 1,
   'inventory' => 'keyboard',
   'user' => 'This is my name',
   'quantity' => 4
 }

Ответы [ 3 ]

2 голосов
/ 16 апреля 2019

В ваших моделях должны быть отображены следующие отношения.

Loan.php

public function loanDetails()
{
    return $this->hasMany(LoanDetail::class);
}

public function user()
{
    return $this->belongsTo(User::class);
}

LoanDetails.php

public function inventory()
{
    return $this->belongsTo(Inventory::class);
}

public function loan()
{
    return $this->belongsTo(Loan::class);
}

Если вы можете сделать это таким образом, чтобы запросить данные из базы данных,

$loan = Loan::with('loanDetails.user', 'loanDetails.inventory')->find(1);

затем, чтобы получить желаемый результат,

return [
            'loan_id' => $loan->id,
            'inventory' => $loan->inventory, //this will return the full inventory object you can do  $loan->inventory->name_inventory to access attributes
            'user' => $loan->user->name,
            'quantity' => $loan->quantity 
        ]
0 голосов
/ 02 мая 2019
  $data = DB::table('Loan')
    ->select('Loan.id as loan_id','Inventories.name_inventory as 
             inventory','Users.Name as users', 'Loan.quantity' )
    ->join('Loandetails', 'Loandetails.loan_id', '=', 'Loan.loan_id')
    ->join('Inventories', 'Inventories.inventory_id', '=', 
           'Loandetails.inventory_id')
    ->join('Users', 'Users.user_id', '=', 'Loan.user_id')
    ->get()->toArray();
0 голосов
/ 16 апреля 2019
$data = DB::table('loan')
        ->select('loan.id as loan_id','invetoris.name_inventory as inventory','users.Name as users', 'loan.quantity' )
        ->join('loandetail', 'loandetail.loan_id', '=', 'loan.loan_id')
        ->join('inventoris', 'inventoris.inventory_id', '=', 'loandetail.inventory_id')->join('users', 'users.user_id', '=', 'loan.user_id')
        ->get()->toArray();



$info = [];
foreach($data as $key => $val) {
$info[] = [
'loan_id' => $val['loan_id'],
'inventory' => $val['inventory'],
'user' => $val['users'],
'quantity' => $val['quantity']
]; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...