Добавление товара в список желаний laravel - PullRequest
0 голосов
/ 14 октября 2019

Я создаю функциональность, которая позволяет пользователю добавлять продукт в список желаний, но я получаю ошибку Trying to get property of non-object, когда я нажимаю (блейд-лист желаний), ошибка появляется из этой строки <h4>USD {{$wishlist->product->price }}</h4>, если я удаляю$product он не показывает цену, как мне это исправить?

Контроллер желаний

public function index()
{
     $user = Auth::user();
     $wishlists = Wishlist::where("user_id", "=", $user->id)->orderby('id', 'desc')->paginate(10);
     return view('wishlist', compact('user', 'wishlists'));
}

Blade

@if (Auth::user()->wishlist->count() )
@foreach($wishlists as $wishlist)

<h2>USD {{$wishlist->product->price }}</h2>
<h4>USD {{$wishlist->product->name }}</h4>

@endforeach
@endif

Wishlist.php

class Wishlist extends Model
{
protected $table = "wishlist";
protected $fillable=['product_id','user_id'];

public function user(){
   return $this->belongsTo(User::class);
}

public function product(){
   return $this->belongsTo(Product::class);
}
}

User.php

 public function wishlist(){
    return $this->hasMany(Wishlist::class);
 }

Product.php

 public function wishlist(){
    return $this->hasMany(Wishlist::class);
 }

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Во-первых, вы должны получить доступ к отношению product следующим образом (удаление $):

$wishlist->product->price

Во-вторых, вы должны загрузить product списка желаний, используя построитель запросов ::with():

public function index()
{
     $user = Auth::user();

     $wishlists = Wishlist::with('product')
          ->where('user_id', $user->id)
          ->orderby('id', 'desc')
          ->paginate(10);

     return view('wishlist', compact('user', 'wishlists'));
}

Кроме того, если я прав, ваше отношение к продукту неверно.

В вашем списке желаний должно быть много продуктов (а не наоборот).

На вашем веб-интерфейсе вам нужно будет просмотреть все продукты списка желаний:

@foreach($wishlist->products as $product)
    {{ $product->price }}
@endforeach

Измените отношение в вашем классе Wishlist на hasMany:

public function products()
{
   return $this->hasMany(Product::class);
}
0 голосов
/ 14 октября 2019

Сначала вы должны изменить способ проверки количества списков пожеланий, поскольку он выполняет сложный запрос, который восстанавливает все списки пожеланий , а затем подсчитывает их. А также удалите $ в $product, как предложено @lucasArbex

@if ($wishlists->count() )
@foreach($wishlists as $wishlist)

<h2>USD {{$wishlist->product->price }}</h2>
<h4>USD {{$wishlist->product->name }}</h4>

@endforeach
@endif

Также измените свой контроллер и используйте отношение для вашего пользователя

public function index()
{
     $user = Auth::user();

     $wishlists = $user->wishlist()->with('product')
          ->orderby('id', 'desc')
          ->paginate(10);

     return view('wishlist', compact('user', 'wishlists'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...