Php 如何删除Yii 2中的相关记录?
我有一个表(用户),在另一个表(顺序)中有相关数据,它们之间的连接是一对多的 在这里,我了解了如何创建相关数据(订单)。但是在检查用户时,如何删除此数据(订单)Php 如何删除Yii 2中的相关记录?,php,database,activerecord,model,yii2,Php,Database,Activerecord,Model,Yii2,我有一个表(用户),在另一个表(顺序)中有相关数据,它们之间的连接是一对多的 在这里,我了解了如何创建相关数据(订单)。但是在检查用户时,如何删除此数据(订单) $customer = Customer::findOne(123); $order = new Order(); $order->subtotal = 100; // setting the attribute that defines the "customer" relation in Order $order->c
$customer = Customer::findOne(123);
$order = new Order();
$order->subtotal = 100;
// setting the attribute that defines the "customer" relation in Order
$order->customer_id = $customer->id;
$order->save();
$order->id; //e.g. 1
我删除它的方法是:
$order = $customer->getOrders()
->where(['=', 'id', 1])
->all();
$order->delete();
这是正确的方法吗
注意:我使用约束。您可以使用
beforeDelete
或AfterDelete()
来删除相关的表数据
简单的例子:
public function beforeDelete(){
foreach($this->location_children as $c)
$c->delete();
return parent::beforeDelete();
}
您可以在数据库约束中处理此问题是的,它在我的数据库约束中处理。我只是问这个方法是否正确。它肯定不是不正确的,但完全没有必要,因为您已经设置了约束。如果您还有其他处理(例如,记录特定用户的订单已被删除),您可以使用@shivani提到的方法来处理。@kst-hmm但我不想删除用户,我只想删除此订单。也许我的例子不好。@Jurik,我明白了。那么我认为你的方法很好。只要确保你不要在
where
方法中硬编码1
(即->where(['=','customer\u id',$cutomer->id])
)。我认为在关系数据库中,使用约束+Yiis活动记录,你不需要这样的操作吗?是的,使用数据库端的约束,你可以实现你的目标,在未来,您将获得一种删除相关数据的方法。