2017-08-10 10 views
0

私はお互いに依存する3つのテーブルを持っています。モデルyiiを使用してカスケード削除する方法

1st level = partner_company 
2nd level = partner 
3rd level = partner_deals 

第1レベルに「id」があります。 第2レベルには、partner_company "id"の外部キーである "company_id"があります。 第3階層には、パートナー表(第2階層)「id」の外部キー「partner_id」があります。

=>id = 1のユーザー削除会社の機能を追加したいと思っています。その後、第2レベルのテーブルと第3レベルの会社のすべてのレコードも削除します。

=>id = 1のパートナーからのレコード削除の場合は、partner_id = 1のpartner_deals(第3レベル)からレコードを削除してください。

誰でもこの機能を追加できます。それは最初に依存しているレコードを削除するように

おかげ

+0

に同じ操作を行います。 –

+0

なぜデータベース自体のリレーションに対してカスケード削除を定義しないのですか?それともあなたが権利を持っていないのですか? – Barry

答えて

1

あなたはbeforeDeleteを上書きすることができます。あなたのpartner_companyモデルで

は、あなたがこれまでに行っているコードを入力してくださいpartnerモデルとの関係

public function getPartner(){ 
    return $this->hasOne(Partner::className(), ['id' => 'company_id']); 
} 

public function beforeDelete() { 
    $this->partner->delete(); 

    // call the parent implementation so that this event is raise properly 
    return parent::beforeDelete(); 
} 

は、他の2つのモデルpartnerpartner_deals

関連する問題