Я пытаюсь получить параметр запроса id из URL-адреса. После этого я хочу сравнить идентификатор в URL-адресе с идентификатором произведения искусства в базе данных, совпадает ли он, а затем перейти к другому действию.
Однако $artworks()->id в предложении where считается неопределенной переменной. Проблема в неопределенной переменной: artworks. Могу я узнать, какая часть у меня неправильная?
public function show($id)
{
if (filled($id)){
$artworks = Artwork::all()->where($id,'=',$artworks()->id);
$categories = Category::all();
$artist = User::all();
return view('pages.artwork-detail', compact('categories', 'artworks','artist'));
}else{
echo("The id does not exist.");
}
}
Если вы пытаетесь найти произведение, соответствующее идентификатору, вам просто нужно Artwork::find($id)
@aynber, потому что я также хочу получить все данные из таблицы Artwork и отобразить их в поле зрения. Может ли он по-прежнему получать все данные с помощью Artwork::find($id)?
find получит все данные для 1 произведения искусства. Если вам нужны все записи о произведениях искусства, вам вообще не нужен идентификатор.
Маршрут show($id) обычно предназначен для отображения записи Один из базы данных. Маршрут index() обычно показывает все записи из таблицы базы данных. Выясните свои требования и используйте правильные соглашения о маршрутизации. Кроме того, у вас есть много проблем с вашим кодом; $artworks = $artworks()->id; бессмысленно; $artworks еще не определен и не является методом. ::all()->where() тоже очень плохо, так как он загружает каждую запись из БД только для того, чтобы найти ее. Используйте ::find($id) или ::where('id', $id)->first() и т. д. Ознакомьтесь с документацией и исправьте свой код.






Вы можете просто сделать это следующим образом:
public function show($id)
{
if (filled($id)){
$artworks = Artwork::find($id);
$categories = Category::all();
$artist = User::all();
return view('pages.artwork-detail', compact('categories',
'artworks','artist'));
}else{
echo("The id does not exist.");
}
}
Я не знаю, сработает ли мой ответ, но я определенно могу исправить некоторые проблемы в вашем коде.
public function show($id)
{
if (!filled($id)) return echo("The id does not exist.");
// I don't know $id belongs to what. If it's artworks' id:
$artworks = Artwork::findOrFail($id);
// Otherwise, let's say it's user_id on the artworks table:
$artworks = Artwork::where('user_id', $id)->get();
// But if it's, use the following line instead of the other one.
$categories = Category::all();
$artist = User::all();
return view(
'pages.artwork-detail',
compact('categories', 'artworks', 'artist')
);
}
Попробуйте эти условия
$artworks = Artwork::where('id','=', $id)->get();
$artworks = Artwork::where('id', $id)->get();
$artworks = Artwork::find($id);
если вам нужна только одна запись, попробуйте это условие where
$artworks = Artwork::where('id','=', $id)->first();
$artworks = Artwork::where('id', $id)->first();
$artworks = Artwork::find($id);
$artworksне определено. Откуда вы ожидали, что это придет?