试图在我的控制器中获取非对象的属性

时间:2017-08-01 02:44:38

标签: php mysql laravel-5

我使用两个表来检索数据并在我的产品页面上查看它。它工作正常,但当我点击"添加到购物车"按钮它说'试图获得非对象的财产'

这是我的代码:

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');
 }

3 个答案:

答案 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');
}