Laravel Eloquent belongsToMany() - > getResults()忽略软删除

时间:2014-11-19 18:09:16

标签: laravel-4

使用Laravel 4.2。*,我有一个实现软删除的数据透视表。当我运行Model :: all()时,我得到了预期的结果,但是当我通过父级访问数据时,我也获得了删除的行。

父模型分类具有以下代码:

 public function organizations(){
    return $this->belongsToMany('Organization', 'organization_classifications', 'classification_id', 'organization_id')->getResults();
}

枢轴模型OrganizationClassification如下所示:

use Illuminate\Database\Eloquent\SoftDeletingTrait;
class OrganizationClassification extends BaseCrudModel{
    use SoftDeletingTrait;
    protected $dates = ['deleted_at'];
    protected $table = 'organization_classifications'; 
}

该表有一个可为空的列,deleted_at,并且该列中有一条记录具有正确的日期时间值。

如果我进行OrganizationClassification :: all()我会返回一行,但如果我执行以下操作:

$c = Classification::find(1);
$ret = $c->rganizations();

我回来了两行。

是否有某些方法只能取回未删除的行,但是采用getResults提供的混合格式?

1 个答案:

答案 0 :(得分:3)

由于软删除列位于数据透视表上,您应该尝试为其设置条件:

public function organizations()
{
    return $this->belongsToMany('Organization', 'organization_classifications', 'classification_id', 'organization_id')->whereNull('organization_classifications.deleted_at');
}

这将排除deleted_atnull的条目。