我正在尝试手动删除一些记录,从相关的表,以拉拉。我需要一个递归函数来解决这个儿子的案子。
---hasOne-->cciMonitoring
我必须取消监视器,并将主活动留在数据库上;
subActivity
密钥存储在父侧,用于活动/次法案->活动携带外部密钥;
当我去取消显示器时:
如果是的话,我将检查这个
私有函数$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();}返回;}
请注意,在调用此功能的功能上,主要监控内容被删除了。
通过以下方式:
[activty1 , subActivity1 ] ---->[activityMonitoring1]
[subActvity1 , subActivity2] --->[activityMonitoring2]
[subActivity2]删除监视1,应该会导致: activty1,其余的设置为null或deleted。
但是,在这个场景中,上面的代码给了我:
[activty1 , subActivity1 ]
[subActvity1 , subActivity2]
[subActivity2]所以subActivity部分没有被触及,为什么?模型对我来说是正确的,我打印了许多dd(),以检查它们;
相关模式是:
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');
}
}发布于 2021-07-08 07:29:31
问题是递归函数的返回以及检验模型关系存在性的方法。模型没有->has('relation'),因为它是从->get()或->first()等返回的。我使用insted:
$model->relation()->exists()这是函数的正确代码:
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;
} https://stackoverflow.com/questions/68272247
复制相似问题