Привет, я новичок в laravel, но я хотел бы загрузить все бронирования для текущего пользователя, вошедшего в систему.
я пытался сделать это
//check if user is logged in
if ($user = Auth::user()) {
//get only the bookings for the currently logged in user
$allProducts =Booking::where('client', Auth::user()->name)->where('name', $name)->first();
//store the bookings in a products variable
$products = json_decode(json_encode($allProducts));
//Loop through the products:
foreach ($products as $key => $val) {
//get the name of the service by matching it's id in the service model to the service column in the products
$service_name = Service::where(['id' => $val->service])->first();
//get the charge amount of the service by matching it's id in the Charge model to the charge column in the products
$service_fee = Charge::where(['id' => $val->charge])->first();
//get the status of the service by matching it's id in the status model to the status column in the products
$service_status = Status::where(['id' => $val->status])->first();
$products[$key]->service_name = $service_name->name;
$products[$key]->service_fee = $service_fee->total;
$products[$key]->service_status = $service_status->name;
}
return view('client.booking.view_bookings')->with(compact('products'));
}
return view('/login');
}
Но это дает мне ошибку: Неопределенная переменная: имя в строке
$allProducts =Booking::where('client', Auth::user()->name)->where('name', $name)->first();
Что я могу делать неправильно? и как я могу решить, чтобы отображались только необходимые данные
$имя не определено. что нужно ->where('name', $name)
выполнить? и не по теме, а зачем вам json_decode(json_encode)-то?
@MarkusDresch, это должно позволить мне получать только бронирования для текущего пользователя, это то, что у меня было $allProducts = Booking::get();
, и оно давало мне бронирования для всех пользователей, которые представили в БД
хотя похоже, что $name не существует. я не знаю ваш код, но я думаю, что $allProducts =Booking::where('client', Auth::user()->name)->first();
должно быть достаточно.
@MarkusDresch Я отредактировал код, чтобы добавить комментарии о том, что я делаю. код, который вы предоставили, возвращает пустой набор данных
хорошо, но ошибка, которую вы получаете, по-прежнему связана с тем, что вы используете переменную $name, которой не существует. проверьте, что возвращает Auth::user()->name
и соответствует ли это вашему полю «клиент». «клиент» содержит имя пользователя? не зная вашей схемы БД, это немного сложно догадаться, но, вероятно, вы хотите сравнить поле «имя» с Auth::user()->name
Я безуспешно пытался понять, что вы делаете, но из ваших объяснений в комментариях я думаю, что знаю, что вы хотите сделать.
Поскольку вы сказали, что этот код хорошо работает для вас, за исключением того, что он дает вам результаты всех данных в базе данных независимо от вошедшего в систему пользователя.
$allProducts = Booking::get();
это потому, что это создает запрос, который выбирает все данные в базе данных.
Что вам нужно, так это добавить предложение where к вашему заявлению. для этого просто добавьте это к приведенной выше строке кода
where('client', Auth::user()->name)
он вернет только те данные, которые содержат столбец клиента, равный имени текущего пользователя, вошедшего в систему.
Поэтому вся строка кода становится;
$allProducts = Booking::get()->where('client', Auth::user()->name);
В качестве альтернативы вы можете использовать фильтры
Где определяется переменная
$name
?