我使用两个表来检索数据并在我的产品页面上查看它。它工作正常,但当我点击"添加到购物车"按钮它说'试图获得非对象的财产'
这是我的代码:
public function getIndex()
{
//display all products
$products = DB::table('products')
->join('categories', 'products.category_id', '=' ,'categories.id')
->select('products.*', 'categories.*')
->paginate(6);
//display all mobiles category
$mobiles = DB::table('products')
->join('categories', 'products.category_id', '=' ,'categories.id')
->select('products.*', 'categories.*')
->where('category_id', 1)
->paginate(6);
return view('shop.index', ['products' => $products, 'mobiles' => $mobiles]);
}
//add to cart controller
public function getAddToCart(Request $request, $id){
$product = Product::find($id);
$oldCart = Session::has('cart') ? Session::get('cart') : null;
$cart = new Cart($oldCart);
$cart->add($product, $product->id);
$request->session()->put('cart', $cart);
return redirect()->route('product.index');
}
答案 0 :(得分:0)
你没有提供任何error_log,所以我不能指出问题。
我给了一些addvise来找到问题;
'试图获得非对象的属性'表示您希望从对象获取属性为null。
首先,您可以查看代码并找到尝试获取属性的位置。
然后使用' var_dump'打印最有可能的地方。
最后你可以找到你想要的东西
答案 1 :(得分:0)
问题是我使用产品表时添加到购物车按钮只有它正常工作
public function getIndex()
{
$products = Product::all();
return view('shop.index', ['products' => $products]);
}
//add to cart controller
public function getAddToCart(Request $request, $id){
$product = Product::find($id);
$oldCart = Session::has('cart') ? Session::get('cart') : null;
$cart = new Cart($oldCart);
$cart->add($product, $product->id);
$request->session()->put('cart', $cart);
return redirect()->route('product.index');
}
答案 2 :(得分:0)
好的,所以你的错误实际上与你的视图模板(特别是添加到购物车按钮)而不是实际的控制器有关。
查看您的shop.index
并检查您是否确实将正确的product.id
传递给了“添加到购物车按钮”。
您的控制器中的错误是由于您传递 无效的产品ID 。
这是你在控制器中处理错误的方法:
public function getAddToCart(Request $request, $id){
$product = Product::find($id);
/* This is how you handle your error */
if(empty($product)) {
// there is no valid product id being passed so return early
return false;
}
$oldCart = Session::has('cart') ? Session::get('cart') : null;
$cart = new Cart($oldCart);
$cart->add($product, $product->id);
$request->session()->put('cart', $cart);
return redirect()->route('product.index');
}