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!我在错误的模型上使用了分离。有趣。谢谢