以下是我的一些代码:
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()
,但这也失败了。
答案 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()
关系的方法。它所做的就是重置外键,因此在调用方法后仍需要保存模型。