无法在模型构造函数中指定变量值

时间:2013-12-17 11:36:16

标签: php laravel

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

模型方法工作正常,但我似乎无法在构造函数中预先填充$ quantity变量,而不是0。

所以这是该模型的摘录:

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

虽然这是我尝试从控制器检索结果的方式:

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

foreach ($cartitems as $cartitem)
{
    echo $cartitem->name;
    echo $cartitem->quantity;
}

您可能会猜测'cartshopping'来自用户模型与我粘贴的模型摘录相关。

我还注意到,调用了quantity()方法并且它一直返回0,好像$ this-> cart_id为空,并且用实际值更改$ this-cart_id,查询本身甚至不执行

非常感谢你们可以分享的任何建议。

1 个答案:

答案 0 :(得分:1)

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

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

如果不这样做,你可以尝试使用Eloquent访问器,这是最好的方法。这也会使它变得动态,这可能很有用。

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

}