Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 如何删除Yii 2中的相关记录?_Php_Database_Activerecord_Model_Yii2 - Fatal编程技术网

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活动记录,你不需要这样的操作吗?是的,使用数据库端的约束,你可以实现你的目标,在未来,您将获得一种删除相关数据的方法。