Как получить данные из связанной таблицы в Laravel (один ко многим)?

php laravel laravel-5.2

2316 просмотра

3 ответа

360 Репутация автора

У меня есть две таблицы: users, orders. Я пытаюсь получить все заказы для текущего пользователя.

Users    Orders
_____    ______
id | name  id | user_id

Модель пользователя:

public function orders(){
     return $this->hasMany("App\Order");
}

Модель заказа:

public function user(){
    return $this->hasOne("App\User", 'user_id', 'id');
}

Запрос в контроллере:

public function index()
{

    $orders = Order::where('user_id', Auth::guard('api')->id())->get();
    return response()->json(
        $orders->user
    );
}

Я получаю NULL результат, я делаю что-то не так, потому что в обеих таблицах есть связанные строки.

Автор: Dev Источник Размещён: 18.07.2016 09:34

Ответы (3)


2 плюса

3394 Репутация автора

В модели заказа необходимо использовать belongsToотношения:

public function user()
{
    return $this->belongsTo("App\User"); // second and third arguments are unnecessary.
}
Автор: Martin Heralecký Размещён: 18.07.2016 09:42

1 плюс

321 Репутация автора

В пользовательской модели вы можете использовать отношение hasMany, например, в:

App/User.php

Добавлять

public function orders()
{
   return $this->hasMany("App\Order", "user_id", "id");
}

Теперь вы можете использовать это:

return User::find(1)->orders;
Автор: Rys Размещён: 19.07.2016 12:01

2 плюса

3337 Репутация автора

Решение

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

public function index()
{
    $orders = Auth::user()->with('Orders')->get()->toArray();//To get the output in array
    /*        ^               ^
     This will get the user | This will get all the Orders related to the user*/

    return response()->json($orders);
}

Как отметил @Martin Heralecký, вам также необходимо изменить , hasOne()чтобы belongsTo()в Приказе модели. Смотрите следующее (скопировано из @Martin Heralecký answer)

public function user(){
    return $this->belongsTo("App\User");// second and third arguments are unnecessary.
}

Почему принадлежит To ():

has_oneи, belongs_toкак правило, одинаковы в том смысле, что они указывают на другую связанную модель. belongs_toубедитесь, что в этой модели определен внешний_ключ has_oneудостоверяется, что в другой модели определен ключ_foreign.

Ваш $ordersмассив будет выглядеть примерно так:

User => [
 id => 'user id',
 name => 'user name'
 orders => [
  0 => [
         //order data
       ]
  1 => [
         //order data
       ]
       .
       .
       .
       .
   ]
]
Автор: jaysingkar Размещён: 19.07.2016 05:49
Вопросы из категории :
32x32