@Dmitry28PRo

Как сделать правильно запрос для вывода данных одного пользователя?

Здравствуйте. У меня есть БД и там есть таблицы Юзер и инвойс, я их связал, теперь когда я формирую инвойс всё ок, но я хочу формировать только инвойс человека возле которого нажал кнопку, а оно мне формирует инвойс только (ид 1 и данные человека ид 1). А у человека ид 2 и другие данные.
Вот контроллер:
public function invoiceView()
    {
        $this->user = Auth::User();
        $pdf = PDF::loadView('pdf.invoice', ['data' => User::where('id', $this->user->id)->get()], ['invoice' => Invoice::where('id', $this->user->id)->get()]);
        return $pdf->stream('invoice.pdf');
    }

Почему у меня выводит только первого пользователя? а не второго или 3-его.?
если немного запрос изменю то выведет правильно вот на такой 'data' => User::where('id', 2)->get() //то выведет пользователя 2
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Sanes
@Sanes
!
Передайте id юзера и будет выдавать, которого запросите.
$this->user = Auth::User(); это текущий авторизованный пользователь.

public function invoiceView($id, $invoiceId)
    {    
        $pdf = PDF::loadView('pdf.invoice', ['data' => User::where('id', $id], ['invoice' => Invoice::where('id', $invoiceId)->first()]);
        return $pdf->stream('invoice.pdf');
    }

В шаблоне цикл не нужен. Примерно так.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Stalinko
PHP'шник и фрилансер до мозга костей
1. User::where('id', $this->user->id)->get() - какое-то масло масляное. Переменная $this->user уже содержит пользователя. Зачем его снова загружать из БД? Да ещё в виде коллекции.

2. Invoice::where('id', $this->user->id)->get() - у инвойсов ID совпадают с пользователями? Бред какой-то. Наверное, там должна быть колонка user_id

В итоге получаем следующее:

$pdf = PDF::loadView('pdf.invoice', ['user' => $this->user, 'invoice' => Invoice::where('user_id', $this->user->id)->first()]);


В шаблоне:

User ID: {{ $user->id }}<br>
Invoice {{ $invoice ? $invoice->id : 'n/a' }}


Опять же - почему инвойс один? В реальном мире должна быть коллекция инвойсов, либо последний инвойс.
Ответ написан
@Mellorn
У вас в контроллере написана какая-то глупость.
$this->user = Auth::user();
Тут вы получаете аутентифицированного пользователя.
User::where('id', $this->user->id)->get()
Это зачем?
Вы же получаете пользователя по ID аутентифицированного пользователя. Но это не имеет смысла. Он ведь у вас уже в $this->user есть. К тому же, методом get вы получаете коллекцию.
Invoice::where('id', $this->user->id)->get()
Тут вы получаете коллекцию инвойсов, у которых ID совпадает с ID аутентифицированного пользователя. Вы уверены, что вы делаете именно то, что нужно? Я подозреваю, что ID инвойсов является уникальным primary key, а принадлежность инвойса юзеру определяется каким-нибудь столбцом типа user_id. Это предположение. Не зная структуру таблиц, точнее сказать не могу.
Что значит фраза
я хочу формировать только инвойс человека возле которого нажал кнопку
?
Предполагаю, что во вьюхе у вас есть некая ссылка, содержащая ID пользователя, кликнув на которую, вы хотите получить PDF.
Но это предполагает, что вы в контроллере должны получать этот ID из реквеста.
Тут я ничего подобного не вижу. Вы работаете исключительно с аутентифицированным пользователем.
Да, и почему бы вобще не использовать relations в моделях?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы