Laravel - Получить пользователей для тикеров - PullRequest
0 голосов
/ 12 июня 2019

Я понимаю, что это может быть очень просто, но я не могу разобраться с этим.

Скажем, я получаю все билеты

$tickets  = Ticket::all();

И одной строкой я хочу получитьу всех пользователей, связанных с каждым тикером (у каждого тикета есть поле с user_id), есть одна строка кода, которая может сделать это в Laravel.Я могу сделать старый способ зацикливаться на каждом билете и указывать детали для каждого пользователя, как показано ниже, но я просто ищу здесь лучшие практики.

foreach($tickets as $ticket):
     $ticket->user = User::find($ticket->user_id);
endforeach;

Ответы [ 3 ]

2 голосов
/ 12 июня 2019

Я предполагаю, что вы определили правильные отношения в своих моделях.

Вы можете использовать красноречивые отношения laravel, чтобы получить все билеты пользователей

$tickets = User::with('tickets')->get();

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

$tickets = User::has('tickets')->get();

Чтобы получить только все билеты:

$tickets = Ticket::all();

и тогда в своем клинке вы можете сделать:

@foreach($tickets as $ticket)
 // getting user using relationship
 {{ $ticket->user->name }}
@endforeach

или для получения билетов, связанных с пользователем, вы можете использовать

$tickets = Ticket::whereHas('user', function ($q) {
                       $q->with('user');
                   })
                   ->get();

чтобы узнать больше об отношениях, посетите this

1 голос
/ 12 июня 2019

Во-первых, вы объявляете связь модели Ticket с моделью User:

Это код в модели Ticket:

public function user()
{
    return $this->hasOne('App\Model\User', 'user_id', 'id'); //id is the primary key in User table
}

затем получение всех билетов с информацией пользователя

$tickets  = Ticket::load('user')->all();

или

$tickets  = Ticket::with('user')->all();
0 голосов
/ 12 июня 2019

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

$tickets = Ticket::whereHas('user', function ($query) {
                       $query->with('user');
                   })
                   ->get();

Если вы уверены, что у всех билетов есть связанный пользователь, используйтеэто:

$tickets = Ticket::with('user')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...