Laravel 4删除与外键相关的多个模型

时间:2014-03-04 07:40:34

标签: php model laravel-4 foreign-keys

所以我有三个模型,当其中一个dAgency被删除delete-()时,我希望删除所有三个模型。问题是其中两个正在被删除,而顶级父一个DemDataSet没有被删除。另外,当我打电话时:

echo "<pre>", dd(dAgency::find(21)->DemographicReport()->DemDataSet()->get()), "</pre>";

我收到此错误:Call to undefined method Illuminate\Database\Query\Builder::DemDataSet()但是当我尝试时:

echo "<pre>", dd(dAgency::find(21)->DemographicReport()->get()), "</pre>";

有效。所以我知道问题是我的DemDataSet模型之间的关系。以下是我的模特:

<?php

class DemDataSet extends Eloquent {

    public $timestamps = false;
    protected $connection = 'epcr_dem_data';
    protected $table = 'DEMDataSet';
    protected $primaryKey = 'pk_DEMDataSet';

    public function DemographicReport(){
        return $this->hasOne('DemographicReport','fk_DEMDataSet','pk_DEMDataSet');
    }


}

class DemographicReport extends Eloquent {

    public $timestamps = false;
    protected $connection = 'epcr_dem_data';
    protected $table = 'DemographicReport';
    protected $primaryKey = 'pk_DemographicReport';

    public function DemDataSet (){
        return $this->belongsTo('DemDataSet','fk_DEMDataSet','pk_DEMDataSet');
    }

    public function dAgency(){
        return $this->hasOne('dAgency','fk_DemographicReport','pk_DemographicReport');
    }

    public function delete(){
        parent::delete();
        return $this->DemDataSet()->delete();
    }

}

class dAgency extends Eloquent {

    public $timestamps = false;
    protected $connection = 'epcr_dem_data';
    protected $table = 'dAgency';
    protected $primaryKey = 'pk_dAgency';

    public function DemographicReport(){
        return $this->belongsTo('DemographicReport','fk_DemographicReport','pk_DemographicReport');
    }

    public function dAgency_10(){
        return $this->hasMany('dAgency_10','fk_dAgency','pk_dAgency');
    }

    public function delete(){
        parent::delete();
        return $this->DemographicReport->delete();
    }

}

?>

我已经和这个人摔跤了两天了!我非常感谢你花时间看这个。

1 个答案:

答案 0 :(得分:1)

通过这种方式查询laravel模型的正确方法是:

//This is to pull all DemDataSet from DemographicReport
dAgency::find(21)->DemographicReport()->first()->DemDataSet;

//If you need further query, then you call DemDataSet as a method
dAgency::find(21)->DemographicReport()->first()->DemDataSet()->where('your condition here')->get();