传递给 Illuminate\Database\Eloquent\Model::__construct() 的参数 1 必须是数组类型,给定对象,

Posted

技术标签:

【中文标题】传递给 Illuminate\\Database\\Eloquent\\Model::__construct() 的参数 1 必须是数组类型,给定对象,【英文标题】:Argument 1 passed to Illuminate\Database\Eloquent\Model::__construct() must be of the type array, object given,传递给 Illuminate\Database\Eloquent\Model::__construct() 的参数 1 必须是数组类型,给定对象, 【发布时间】:2019-03-04 00:07:45 【问题描述】:

我尝试添加到购物车,但我不断收到此错误 传递给 Illuminate\Database\Eloquent\Model::__construct() 的参数 1 必须是数组类型,给定对象,在 C:\xampp\htdocs\laravelcart\app\Http\Controllers\ProductController.php 中调用

这是我的代码

cart.php 模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Cart extends Model

    //

    public $items = null;
    public $totalQty = 0;
    public $totalPrice = 0;

    public function _construct($oldCart)
    
        if ($oldCart) 
            $this->items = $oldCart->items;
            $this->totalQty= $oldCart->totalQty;
            $this->totalPrice = $oldCart->totalPrice;
        

    

    public function add($item, $id)
    
        $storedItem = ['qty' => 0, 'price' => $item->price, 'item' => $item];

        if ($this->items)
        
            if (array_key_exists($id, $this->items))
            
                $storedItem = $this->items[$id];
            
        
        $storedItem['qty']++;
        $storedItem['price'] = $item->price * $storedItem['qty'];
        $this->items[$id] = $storedItem;
        $this->totalQty++;
        $this->totalPrice += $item->price;
    




product controller
<?php

namespace App\Http\Controllers;

use App\Product;
use Session;
use App\Cart;
use Illuminate\Http\Request;

class ProductController extends Controller

    //

    public function getIndex()
    
        $products = Product::all();
        return view('shop.index', compact('products'));
    

    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('shop.index');

    

我的错误似乎来自 $cart = new Cart($oldCart); 请帮助我...

【问题讨论】:

【参考方案1】:

这里的问题是你的构造函数。实际上,您不会调用您定义的“构造函数”,而是执行父构造函数。这是因为你漏掉了一个下划线,应该是__construct

但是,这样做并不是一个好主意。首先,你应该调用父构造函数,另外这样的自定义构造函数在某些情况下会导致问题。

添加这样的方法会更好:

public static function restoreCart($oldCart)

    $cart = new static();

    if ($oldCart) 
        $cart->items = $oldCart->items;
        $cart->totalQty= $oldCart->totalQty;
        $cart->totalPrice = $oldCart->totalPrice;
    

    return $cart;

然后在您的控制器中,而不是:

$cart = new Cart($oldCart);

你可以使用:

$cart = Cart::restoreCart($oldCart);

【讨论】:

以上是关于传递给 Illuminate\Database\Eloquent\Model::__construct() 的参数 1 必须是数组类型,给定对象,的主要内容,如果未能解决你的问题,请参考以下文章

将块传递给方法传递给Ruby中的另一个方法

无法正确地将值从父母传递给孩子和孩子传递给父母

如何将对象数组作为道具传递给组件,然后将数组的成员作为道具传递给嵌套组件?

为啥将 ClientID 传递给 javascript 函数会传递整个控件?

将变量传递给 jQuery 插件参数

如何将环境变量传递给传递给xmllint的命令?