使用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提供的混合格式?
答案 0 :(得分:3)
由于软删除列位于数据透视表上,您应该尝试为其设置条件:
public function organizations()
{
return $this->belongsToMany('Organization', 'organization_classifications', 'classification_id', 'organization_id')->whereNull('organization_classifications.deleted_at');
}
这将排除deleted_at
为null
的条目。