2014-11-17 5 views
1

У меня есть две модели, называемые Page и User и я создал Красноречивый соотношение следующим образом:Eloquent сфера запроса на отношения

public function user() { 
    return $this->belongsTo('User') 
} 

dd(Page::with('user')->get()) Когда я могу получить правильный результат. Но теперь я хочу иметь фильтр поиска по этому результату.

Я использовал scopeSearch, но я не уверен, как искать на результирующем наборе.

На данный момент у меня есть рамки, как это:

public function scopeSearch($query, $search) { 
    $query->where('username', 'LIKE', '%'.$search.'%') 
    ->orWhere('name', 'LIKE', '%'.$search.'%') 
} 

Так что, когда я Page::with('user')->search('Test')->get() он не работает. Проблема (вероятно) заключается в том, что столбец username является частью таблицы User, а name является частью таблицы Page.

Как я могу использовать область видимости или что-то знакомое, чтобы искать на наборе результатов, не повторяя ее в большинстве запросов?

+0

Изменить эти одиночные кавычки '% $%' поиска в двойных кавычках .. –

+0

К сожалению я обновил его, забыли @JonathanCrowe. Однако это не проблема. – guidsen

ответ

5

Вам нужно создать scopeSearch в User модели, и вы должны использовать его таким образом:

$posts = Page::with('user')->whereHas('user', function($q) use ($search) 
{ 
    $q->search($search); 

})->get(); 
+1

Как я могу заказатьВ колонке из отношения. Я только что использовал ':: join' вместо того, чтобы загружать, потому что я еще не обнаружил. Например, я хочу заказать столбец страницы или столбца пользователя. – guidsen

+1

Если у вас есть новый вопрос, вы должны задать один из них как отдельный вопрос –

+0

OK, сделаю. Спасибо! – guidsen

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