#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>
Так что это странная штука с ларавелем. Кто-нибудь знает, почему это так?