首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能使用递归函数删除相关记录。

我不能使用递归函数删除相关记录。
EN

Stack Overflow用户
提问于 2021-07-06 14:17:24
回答 1查看 55关注 0票数 0

我正在尝试手动删除一些记录,从相关的表,以拉拉。我需要一个递归函数来解决这个儿子的案子。

---hasOne-->cciMonitoring

  • $cciActvity $cciActvity

我必须取消监视器,并将主活动留在数据库上;

subActivity

  • $subActvity (可选)
  • $ccieActivity (可选)

密钥存储在父侧,用于活动/次法案->活动携带外部密钥;

当我去取消显示器时:

  • 我检查监视的活动是否有subAct;

如果是的话,我将检查这个

  • 是否有监视,万一我删除了它;

  • 我检查subAct是否有更多的subAct,并尝试递归调用相同的函数;

  • I将actvity外键设置为null ;

  • I删除subAct;

私有函数$subAct=$ccieActivity->subActivity()->first();delSubAct($ccieActivity) {if($ccieActivity->有(‘subActivity’)){ if($subAct->has('ccie_activity_monitorings')){ if($subAct){ if($subAct->has(‘ccie_activity_monitorings’)){ $monitoringSubActivity= $subAct->ccie_activity_monitorings()->first();if($monitoringSubActivity){ $monitoringSubActivity->delete();}} $ccieActivity->subAct=null;$ccieActivity->save();如果($spostata->具有(‘attSpost’)){返回$this->delSubAct($spostata);} if($spostata){ $spostata->delete();}返回;}

请注意,在调用此功能的功能上,主要监控内容被删除了。

通过以下方式:

代码语言:javascript
复制
[activty1 , subActivity1 ] ---->[activityMonitoring1]
[subActvity1 , subActivity2] --->[activityMonitoring2]
[subActivity2]

删除监视1,应该会导致: activty1,其余的设置为null或deleted。

但是,在这个场景中,上面的代码给了我:

代码语言:javascript
复制
[activty1 , subActivity1 ] 
[subActvity1 , subActivity2] 
[subActivity2]

所以subActivity部分没有被触及,为什么?模型对我来说是正确的,我打印了许多dd(),以检查它们;

相关模式是:

代码语言:javascript
复制
class CcieActivity extends Model
{
    protected $table = 'ccieActivities';
    public $timestamps = false;

    protected $with = ['project','subAct];


    protected $casts = [
        'project_id' => 'int'
    ];

    protected $fillable = [
        'project_id',
        'catAttivita',
        'nomeAttivita',
        'modalitaRealizzazionePrevista',
        'descrizione',
        'dataInizioPrevista',
        'dataFinePrevista',
        'numNegoziAderentiPrevisti',
        'numAziendeCoinvoltePreviste',
        'numInfluencerPartecipantiPrevisti',
        'numBuyerPrevistiB2B',
        'budgetTotalePrevisto',
        'subAct',
    ];

    public function project()
    {
        return $this->belongsTo(Project::class);
    }

    public function ccie_activity_monitorings()
    {
        return $this->hasMany(CcieActivityMonitoring::class, 'ccieActivity_id');
    }

    public function subActivity(){
        return $this->belongsTo(CcieActivity::class,'subAct','id',);

    }
    public function attOrig()
    {

        return $this->hasOne(CcieActivity::class,'subAct','id');

    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-07-08 07:29:31

问题是递归函数的返回以及检验模型关系存在性的方法。模型没有->has('relation'),因为它是从->get()或->first()等返回的。我使用insted:

代码语言:javascript
复制
$model->relation()->exists()

这是函数的正确代码:

代码语言:javascript
复制
private function cancSpost($ccieActivity) //114-1 115-2
        

{


                $spostata=$ccieActivity->attSpost()->first(); //116-2


                if($spostata){
                    if($spostata->ccie_activity_monitorings()->exists()){ //si 107-1 //no-2
                        $monitoringSpostata= $spostata->ccie_activity_monitorings()->first();

                        if($monitoringSpostata){
                            $monitoringSpostata->delete(); //107 via-1
                        }
                    }  
                    $ccieActivity->attivitaSpostata= null ; //115-2=chiavi null
                    $ccieActivity->save();


                    if($spostata->attSpost()->exists())
                    {
                        $this->cancSpost($spostata); //98-1
                        $spostata->delete();
                        return;
                    }elseif($spostata->attSost()->exists())
                    {
                        $this->cancSost($spostata); //98-1
                        $spostata->delete();
                        return;
                    }else{
                        $spostata->delete();
                        return;
                    }
                }else{
                    return;
                } 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68272247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档