Я пытаюсь показать данные из базы данных в своем blade.php файл, но я получаю эту ошибку «Пытаюсь получить свойство»имя» не-объекта»

#php #laravel #foreach #laravel-blade

Вопрос:

 <div class="nieuws2">
        @foreach($product as $product)
            <div class="nieuwsber bericht{{$product->id}}">
                <h2>{{$product->name}}</h2>
                <img src="{{$product->image}}">
                <span>€{{$product->price}}</span>
            </div>
        @endforeach
    </div>
    <form class="saleform" method="post" action="sale">
        <h2>Plaats je bestelling</h2>
        @csrf
        <label for="name">Naam (voornaam   achternaam)</label><br>
        <input type="text" id="name" name="name"><br><br>
        <label for="adres">adres (straat   nr   postcode   gemeente)</label><br>
        <input type="text" id="adres" name="adres"><br><br>
        @foreach ($product as $product)
            <label for="{{$product->name}}">{{$product->name}}</label><br>
            <input type="number" id="{{$product->name}}" name="{{$product->name}}" value="0"><br><br>
            <input type="hidden" id="price" name="price" value="{{$product->price}}">
        @endforeach
        <input type="submit">
    </form>
 

Первый @foreach работает нормально, он делает то, что ему нужно. Но потом я пытаюсь сделать это снова в том же файле blade, и по какой-то причине это не работает. Что он должен сделать, так это просмотреть каждый продукт и ввести в него номер, чтобы клиент мог добавить x-сумму к своему заказу.

Мой контроллер выглядит так:

 public function index(){
        $product = product::get();
        return view ('pages.verkoop', [
            'product' => $product
        ]);
 

Ответ №1:

Вы перезаписываете значение $product , присвоив циклу имя переменной $product ( foreach ($product as $product) ). Вы должны использовать разные имена переменных для того, что повторяется, и текущее значение цикла для того, что вы пытаетесь сделать:

 foreach ($products as $product)
 

Переименование коллекции в $products было бы простым решением. Теперь вы не перезаписываете $products , задавая циклу $product переменную.

Комментарии:

1. 3v4l.org/K69Ze демонстрируя, что происходит

2. Я чувствую себя такой глупой сейчас

Ответ №2:

Итак, очевидно, вы не можете дважды выполнить цикл для одного и того же объекта в одном файле блейда. Я исправил это, изменив контроллер на этот

 public function index(){
        $product = product::get();
        $product2 = product::get();
        return view ('pages.verkoop', [
            'product' => $product,
            'product2' => $product2,
        ]);
    }
 

и изменение blade.php к этому:

 <div class="nieuws2">
        @foreach($product as $product)
            <div class="nieuwsber bericht{{$product->id}}">
                <h2>{{$product->name}}</h2>
                <img src="{{$product->image}}">
                <span>€{{$product->price}}</span>
            </div>
        @endforeach
    </div>
    <form class="saleform" method="post" action="sale">
        <h2>Plaats je bestelling</h2>
        @csrf
        <label for="name">Naam (voornaam   achternaam)</label><br>
        <input type="text" id="name" name="name"><br><br>
        <label for="adres">adres (straat   nr   postcode   gemeente)</label><br>
        <input type="text" id="adres" name="adres"><br><br>
        @foreach ($product2 as $product2)
            <label for="{{$product2->name}}">{{$product2->name}}</label><br>
            <input type="number" id="{{$product2->name}}" name="{{$product2->name}}" value="0"><br><br>
            <input type="hidden" id="price" name="price" value="{{$product2->price}}">
        @endforeach
        <input type="submit">
    </form>
 

Так что это странная штука с ларавелем. Кто-нибудь знает, почему это так?