Результаты запроса зарегистрированного пользователя в laravel

В настоящее время у меня есть система тикетов, и я хотел бы, чтобы пользователи могли просматривать статус их открытых и закрытых билетов.

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

Что я имею:

ROUTE (Это возвращает 404 из-за {ticketId}) / Примечание: если я удалю {ticketId} из маршрута я получаю ошибку типа: *Too few arguments to function App\Http\Controllers\TicketsController::openTickets(), 0 passed and exactly 1 expected"*

Route::get('/tickets/open-tickets/{ticketId}','TicketsController@openTickets')->name('open-tickets');

БИЛЕТЫ КОНТРОЛЛЕР

public function openTickets($ticketId){

$tickets=Classified::find($ticketId);
$ticketId = Auth::user('id');
$tickets = DB::table('tickets')->orderBy('st_id', 'DESC')->where('status', '=', 'OPEN')->where('user_id', '=', $id)->paginate(4);
return view('tickets.open-tickets',compact('tickets'));

Билет МОДЕЛЬ

class Ticket extends Model
{
use Notifiable, HasPermissionsTrait;

protected $ticketId = 'st_id';
protected $guarded=[];

protected $dispatchesEvents = [
'created' => Events\NewTicket::class
];
}

РАБОЧИЙ ВОПРОС ДЛЯ ОТОБРАЖЕНИЯ ВСЕХ БИЛЕТОВ

public function openTickets(){
$tickets = DB::table('tickets')->orderBy('st_id', 'DESC')->where('status', '=', 'OPEN')->paginate(4);
return view('tickets.open-tickets',compact('tickets'));

Я должен отметить, что я изменил свой идентификатор на st_id в таблице заявок, так как я использую идентификатор для отображения номера билета, как это 201804001

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

Изображение таблицы билетов:
введите описание изображения здесь

1

Решение

У вас уже есть модель Ticket, но вы используете фасад DB для запроса таблицы заявок.

Вместо этого, ассоциировать Билеты с пользователей через отношения один ко многим.

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

В вашем классе пользователя:

    public function tickets()
{
return $this->hasMany(Ticket::class);
}

Теперь вы можете сделать $user->tickets()->where('status', 'OPEN')->get(); чтобы получить все открытые билеты для этого пользователя.

Еще дальше, вы можете добавить объем к модели Билета.

В вашем классе билетов:

public function scopeOpen($query)
{
return $query->where('status', 'OPEN');
}

Это позволит вам сделать ваши запросы более беглыми:

$user->tickets()->open()->get();

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

$user->tickets()->save(new Ticket([
'status' => 'open',
'title'  => 'Problem logging in',
'body'   => 'Lorem ipsum dolor sit amet'
]));

Для получения дополнительной информации об отношениях Eloquent (в частности, отношениях «один ко многим»), см документацию здесь.

Чтобы просмотреть все открытые заявки пользователя, используйте следующий маршрут:

Route::get('tickets/open-tickets/', 'TicketsController@index');

Чтобы показать отдельный билет, вам понадобится следующий маршрут:

Route::get('tickets/open-tickets/{ticket}', 'TicketsController@show')

Используйте следующие методы в вашем TicketsController:

public function index()
{
// user() is a helper for Auth::user()
$tickets = user()->tickets()->open()->paginate(4);

return view('tickets.open-tickets', compact('tickets'));
}

public function show(Ticket $ticket)
{
// If the ticket does not belong to the logged in user, abort
if ($ticket->user_id != user()->id) {
abort(403, 'This is not your ticket');
}

return view('tickets.show', compact('ticket'));
}

Вы заметите, что show Метод в вашем контроллере типа подсказки Ticket модель. Это называется привязкой к модели маршрута, что очень полезно, и вы можете Подробнее об этом читайте здесь.

Может показаться, что я слишком усложняю вещи по сравнению с вашим исходным кодом, но, поверьте мне, лучше понять эти вещи на ранней стадии! Они очень вам помогут во время разработки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]