Php 无法在模型构造函数中分配变量值

Php 无法在模型构造函数中分配变量值,php,laravel,Php,Laravel,我正在玩Laravel模型,我需要一个来返回一个不在db表中的值,但它是通过运行一个模型方法来实现的。此方法运行对分组结果进行分组和计数的查询 model方法工作得很好,但我似乎无法在构造函数中用不同于0的东西预填充$quantity变量 这是模型的摘录: public $quantity; function __construct($attributes = array(), $exists = false) { parent::__construct($attributes, $e

我正在玩Laravel模型,我需要一个来返回一个不在db表中的值,但它是通过运行一个模型方法来实现的。此方法运行对分组结果进行分组和计数的查询

model方法工作得很好,但我似乎无法在构造函数中用不同于0的东西预填充$quantity变量

这是模型的摘录:

public $quantity;

function __construct($attributes = array(), $exists = false) {
    parent::__construct($attributes, $exists);
    $this->quantity = $this->quantity();
}

public function quantity()
{
    $query = DB::table('carts_shopping')
            ->select('cart_id', DB::raw('COUNT(*) AS quantity'))
            ->where('cart_id',$this->cart_id)
            ->groupBy('cart_id')
            ->first();
    return ($query) ? $query->quantity : 0;
}
这就是我试图从controller检索结果的方式:

$cartitems = Auth::user()->cartshopping;

foreach ($cartitems as $cartitem)
{
    echo $cartitem->name;
    echo $cartitem->quantity;
}
正如您可能猜到的,“cartshopping”来自与我粘贴的模型摘录相关的用户模型

我还注意到,quantity()方法被调用,它始终返回0,就好像$this->cart\u id是空的,如果用实际值更改$this-cart\u id,查询本身甚至不会执行


非常感谢大家的建议。

您是否尝试过使用$this->attributes访问属性

public $quantity;

function __construct($attributes = array(), $exists = false) {
    parent::__construct($attributes, $exists);
    $this->quantity = $this->quantity();
}

public function quantity() {
    $query = DB::table('carts_shopping')
            ->select('cart_id', DB::raw('COUNT(*) AS quantity'))
            ->where('cart_id', $this->attributes['cart_id'])
            ->groupBy('cart_id')
            ->first();
    return ($query) ? $query->quantity : 0;
}
如果做不到这一点,您可以尝试使用雄辩的访问器,这将是最好的方法。这也将使其具有动态性,这可能是有用的

class YourModel {

    // Normal model data here

    public function getQuantityAttribute() {
        $query = DB::table('carts_shopping')
            ->select('cart_id', DB::raw('COUNT(*) AS quantity'))
            ->where('cart_id', $this->attributes['cart_id'])
            ->groupBy('cart_id')
            ->first();
        return ($query) ? $query->quantity : 0;
    }

}

您是否尝试过var_dump($query);就在回来之前?它可能不包含您认为它的功能,或者它实际上可能是0;返回NULL。相同的结果设置->where('cart_id',23),其中'23'是已知值。那么您的查询不会返回任何结果。我知道它不会返回任何结果!:)要点是:如果我注释掉构造函数并按如下方式调用该方法:echo$cartitem->quantity();结果返回得很好。感谢您的努力Ollieread,刚刚尝试过,结果引发了异常:未定义索引:cart_id。我想知道问题是否存在于Laravel构建模型和调用构造函数的方式中的其他地方。关于雄辩的访问器,这是我的第一个想法,但我后来从Laravel文档中了解到,它们用于“在获取或设置模型属性时转换模型属性”。虽然我的$quantity属性在模型本身上不存在。。。我只是自己计算,所以是这个方法。我是否误解了访问器一章?访问器可以以这种方式使用,但也可以用于添加不存在的属性。我给出的上述代码可以进行包装,以确保$this->attributes['cart\u id']存在,但它应该可以工作。举个例子,我的表中有
active
int(1),但我有getIsActiveAttribute()访问器,它将为$model->is_active返回布尔值。尝试删除自定义构造函数并确保该对象存在。好的。。。切换到“访问器”技术非常有效。现在我的->数量返回了正确的结果,但我没有使用$this->attributes['cart\u id']技巧,$this->cart\u id工作得很好。你可以将答案标记为接受,并将注释标记为有用,如果你愿意的话:)我很高兴它工作了,很乐意帮助:d开始。你救了我,不让我拔头发。。。所以非常感谢!:)