Chcę pokazać mój produkt na jednej stronie, ale mam „Właściwość [nazwa] nie istnieje w tej instancji kolekcji”. błąd

Nóż:

<div class="title">
    <h2>{{ $singleproduct->name }}</h2>
</div>
<div class="single-product-price">
    <h3>{{ $singleproduct->price }}</h3>
</div>
<div class="single-product-desc">
    <p>{!! $singleproduct->explain  !!} </p>
</div>

Kontroler:

public function show()
{
    $singleproduct = Singleproduct::get();
    return view('UI.store.SingleProduct' , compact('singleproduct' ));
}

Trasa:

Route::get('/singleproduct/{product}' , 'admin\SingleproductController@show');
0
hadis 19 grudzień 2019, 22:48
3
Nie masz jednego Singleproduct, masz kolekcję, która może mieć wiele Singleproduct ... Singleproduct może mieć "nazwę", ale ich Kolekcja nie ... get zawsze zwraca Kolekcję ... jeśli chcesz 1 pojedynczy wynik, możesz użyć first (co może zwrócić null)
 – 
lagbox
19 grudzień 2019, 22:50

2 odpowiedzi

Masz kolekcję potencjalnie wielu Singleproduct lub nie zawiera ich. Jeśli chcesz tylko 1, użyj first.

Najprawdopodobniej dlatego, że jest to trasa show, której potrzebujesz konkretnej Singleproduct, którą, jak sądzę, przekazujesz „id” za pośrednictwem adresu URL.

public function show($product)
{
    $singleproduct = Singleproduct::findOrFail($product);

    return view('UI.store.SingleProduct', compact('singleproduct'));
}

Teraz w widoku wiesz, że singleproduct jest zdecydowanie instancją Singleproduct i jest dostępne.

2
lagbox 19 grudzień 2019, 22:53

Musisz wybrać tylko jeden produkt, a nie wszystkie, więc możesz zaktualizować swoją metodę show w ten sposób

Za pomocą route model binding możesz przeczytać więcej o tej niesamowitej funkcji w laravel dokumenty

public function show(Singleproduct $product)
{
   return view('UI.store.SingleProduct' , compact('product' ));
}
2
Joseph 19 grudzień 2019, 23:11