Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么detach不在我的Laravel模型上工作?_Php_Mongodb_Laravel - Fatal编程技术网

Php 为什么detach不在我的Laravel模型上工作?

Php 为什么detach不在我的Laravel模型上工作?,php,mongodb,laravel,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++) {

以下是我的一些代码:

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);
        }
    }
}
类用户扩展模型{
公共职能令(){
返回$this->hasMany('App\Order');
}
公共功能emptyCart(){
$orders=$this->orders;
对于($i=0;$iorders()->detach($order);
}
}
}
但我得到了一个错误:

调用未定义的方法Jenssegers\Mongodb\Query\Builder::detach()

我还尝试了分离():

调用未定义的方法Jenssegers\Mongodb\Query\Builder::dissection()

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

方法只适用于多对多关系。您在
用户
模型上定义的是一对多

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

public function orders() {
    return $this->belongsToMany('App\Order');
}
这还假设您有一个
order\u用户
pivot表设置。执行此操作后,
detach
方法将起作用。detach方法所做的只是删除pivot表中关联这两个记录的条目,它实际上并不删除任何订单记录

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

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

    foreach($orders as $order) {
        $order->user()->dissociate();
        $order->save();
    }
}

dissection()
方法是
belongsTo
关系上的一种方法。它所做的只是重置外键,因此在调用该方法后仍然需要保存模型。

Ahh!我在错误的模型上使用了分离。有趣。谢谢