2014-11-19 3 views
0

Использование Laravel 4.2. *, У меня есть сводная таблица, которая реализует мягкие удаления. Когда я запускаю Model :: all(), я получаю ожидаемые результаты, но когда я получаю доступ к данным через родительский элемент, я получаю также удаленные строки.Laravel Eloquent принадлежит ToMany() -> getResults() игнорирует мягкие удаления

Родитель модель классификации имеет следующий код:

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, и один из 2-х записей имеет правильное значение datetime в этом столбце.

Если я OrganizationClassification :: все() Я получаю одну строку назад, но если бы я сделать следующее:

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

Я получаю 2 строк назад.

Есть ли способ вернуть только восстановленные строки, но в смешанном формате, который предоставляет getResults?

+0

Я предполагаю, что 'BaseCrudModel' расширяет' Eloquent'. Также что делает 'getResults()', поскольку он не является частью API-интерфейса построителя запросов? – Bogdan

+0

В документе API недостаточно сказано о том, что возвращает getResults(), а не «Получить результаты отношений». Это смешанный массив и тянет строку, опорную точку и, может быть, (я не помню) соседированную строку. И да, BaseCrudModel расширяет Eloquent. – JohnL

ответ

2

Поскольку мягкие удаления столбца на сводной таблице, вы должны попытаться созданием условия для этого:

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

Это исключит запись, где deleted_at является null.

Смежные вопросы