Laravel Неопределенная переменная в предложении where

Я пытаюсь получить параметр запроса 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.");
    }

}
$artworks не определено. Откуда вы ожидали, что это придет?
aynber 29.03.2022 19:01

Если вы пытаетесь найти произведение, соответствующее идентификатору, вам просто нужно Artwork::find($id)

aynber 29.03.2022 19:13

@aynber, потому что я также хочу получить все данные из таблицы Artwork и отобразить их в поле зрения. Может ли он по-прежнему получать все данные с помощью Artwork::find($id)?

fallenhamster 29.03.2022 19:19
find получит все данные для 1 произведения искусства. Если вам нужны все записи о произведениях искусства, вам вообще не нужен идентификатор.
aynber 29.03.2022 19:21

Маршрут show($id) обычно предназначен для отображения записи Один из базы данных. Маршрут index() обычно показывает все записи из таблицы базы данных. Выясните свои требования и используйте правильные соглашения о маршрутизации. Кроме того, у вас есть много проблем с вашим кодом; $artworks = $artworks()->id; бессмысленно; $artworks еще не определен и не является методом. ::all()->where() тоже очень плохо, так как он загружает каждую запись из БД только для того, чтобы найти ее. Используйте ::find($id) или ::where('id', $id)->first() и т. д. Ознакомьтесь с документацией и исправьте свой код.

Tim Lewis 29.03.2022 19:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
5
40
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете просто сделать это следующим образом:

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);

Другие вопросы по теме