我试图在我的 blade.php 文件中显示数据库中的数据,但出现此错误 "Trying to get property 'name' of non-object"
I'm trying to show data from database in my blade.php file but I get this error "Trying to get property 'name' of non-object"
<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-amount。
我的控制器看起来像这样:
public function index(){
$product = product::get();
return view ('pages.verkoop', [
'product' => $product
]);
好的,显然你不能在一个 blade 文件中 foreach 循环同一个对象两次。我通过将控制器更改为此
来修复它
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>
所以这很奇怪 laravel。有人知道这是为什么吗?
您通过将循环名称设为变量 $product
(foreach ($product as $product)
) 来覆盖 $product
的值。您应该为正在迭代的内容使用不同的变量名称,并为您尝试执行的操作使用循环的当前值:
foreach ($products as $product)
将集合重命名为 $products
将是一个简单的修复。现在您不会通过让循环设置 $product
变量来覆盖 $products
。
<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-amount。
我的控制器看起来像这样:
public function index(){
$product = product::get();
return view ('pages.verkoop', [
'product' => $product
]);
好的,显然你不能在一个 blade 文件中 foreach 循环同一个对象两次。我通过将控制器更改为此
来修复它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>
所以这很奇怪 laravel。有人知道这是为什么吗?
您通过将循环名称设为变量 $product
(foreach ($product as $product)
) 来覆盖 $product
的值。您应该为正在迭代的内容使用不同的变量名称,并为您尝试执行的操作使用循环的当前值:
foreach ($products as $product)
将集合重命名为 $products
将是一个简单的修复。现在您不会通过让循环设置 $product
变量来覆盖 $products
。