2016-01-11 2 views
1

У меня две модели с шарниром.Как использовать метод wherePivot в области?

Domain 
{ 
    public function projects() 
    { 
     return $this->belongsToMany('Project')->withPivot('is_live'); 
    } 
} 

Project 
{ 
    public function domains() 
    { 
     return $this->belongsToMany('Domain')->withPivot('is_live'); 
    } 
} 

Тогда я пытаюсь создать Scope "домены, которые имеют проекты и is_live = истину", как этого Laravel Scope by pivot data values

public function scopeHasLiveProjects($query) 
{ 
    $pivotTable = $this->projects()->getTable(); 
    return $query->whereHas('projects', function ($q) use ($pivotTable) { 
      $q->where($pivotTable . '.is_live', true); 
    }); 
} 

Но как я могу использовать красноречивый метод wherePivot ('is_live', '=', true) в области? Является ли это возможным?!

ответ

1
public function scopeHasLiveProjects($query) 
{ 
    return $query->whereHas('projects', function ($q) { 
      $q->where('is_live', true); 
    }); 
} 

должны сделать необходимые

+0

Это неправильное решение, becouse «is_live» это поле сводной таблицы. –

+1

принадлежит таблице результатов. Должна быть project_id, domain_id, is_live. А когда выбор проектов области, где стержнем is_live == верно, возвращение $ query-> whereHas ('проекты', функция ($ Q) { $ q-> wherePivot ('is_live', правда); }); должен быть прав, я думаю –

+0

Отлично! Ваше первое решение работает !!! function ($ q) {$ q-> где ('is_live', true); }); ** not ** function ($ q) {q-> гдеPivot ('is_live', true); }); –

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