为什么分离不能用于我的Laravel模型?

时间:2015-11-18 19:41:31

标签: php mongodb laravel

以下是我的一些代码:

class User extends Model {

    public function orders() {
        return $this->hasMany('App\Order');
    }

    public function emptyCart() {
        $orders = $this->orders;

        for ($i = 0; $i < count($orders); $i++) {
            $order = $orders[$i];
            $this->orders()->detach($order);
        }
    }
}

然而我收到了一个错误:

Call to undefined method Jenssegers\Mongodb\Query\Builder::detach()

我也试过dissociate()

Call to undefined method Jenssegers\Mongodb\Query\Builder::dissociate()

最初我只是做$this->orders()->detach(),但这也失败了。

1 个答案:

答案 0 :(得分:1)

class AvgList(list): def avg(self): if not all(map(lambda x:isinstance(x, int), self)): raise ValueError('Invalid item in list. All items need to be an integer.') try: return sum(self) / len(self) except ZeroDivisionError: print('Empty list') # here you can either not return nothing # which means None will be returned, or return something else return -1 方法仅适用于多对多关系。您在detach()模型上定义的内容是一对多。

如果您的用户/订单关系是多对多关系,则需要将关系定义更改为:

User

这也假设您有一个public function orders() { return $this->belongsToMany('App\Order'); } 数据透视表设置。执行此操作后,order_user方法将起作用。所有分离方法都会删除数据透视表中与两条记录关联的条目,它实际上并不删除任何订单记录。

但是,如果您的用户/订单关系实际上是一对多关系,则会正确定义关系,但您的删除逻辑需要更新。如果您要删除订单,只需拨打detach即可。但是,如果不想删除订单记录,只需删除与用户的关系,就可以使用$this->orders()->delete();方法,如下所示:

dissociate()

public function emptyCart() { $orders = $this->orders; foreach($orders as $order) { $order->user()->dissociate(); $order->save(); } } 方法是dissociate()关系的方法。它所做的就是重置外键,因此在调用方法后仍需要保存模型。