2014-10-24 4 views
3

Я думаю, что заголовок довольно запутанный, я постараюсь объяснить это как можно лучше. Допустим, у меня есть довольно большой запрос для поиска сообщений, например:Laravel eloquent split query в несколько шагов

$posts = Post::select('...') 
      ->leftJoin('...') 
      ->leftJoin('...') 
      ->where('...') 
      ->orWhere('...') 
      ->orderBy('...') 
      ->orderBy('...') 
      ->groupBy('...') 
      ->with('...') 
      ->paginate(8); 

Как разбить этот запрос? Например:

$posts = Post::select('...') 
      ->leftJoin('...') 
      ->leftJoin('...') 

$posts->where('...') 
     ->orWhere('...'); 

$posts->orderBy('...') 
     ->orderBy('...') 
     ->groupBy('...'); 

$posts->with('...') 
     ->paginate(8); 

Im используя Laravel 4.2, и я попробовал несколько вещей (в том числе this post), но я не могу заставить его работать. Мне нужно это для поиска и фильтрации сообщений.

+0

Можете ли вы опубликовать фактический код, который используете? Какие ошибки вы получили? –

ответ

9

Начнет с созданием нового экземпляра модели и седений его переменным, построить свой запрос, используя этот переменный, а затем закончить с get():

$posts = new Post; 
$posts = $posts->where('...'); 
$posts = $posts->orWhere('...'); 
$posts = $posts->orderBy('...'); 
... 
$posts = $posts->get(); 

Вместо того, чтобы делать всю эту цепочку, хотя, вы можете, возможно, упростить все, используя области запросов и некоторые хорошо структурированные методы отношений.

+0

Отлично работает, я попробовал '$ posts-> где ('...')' сразу после этого, трюк состоял в том, чтобы использовать '$ posts = $ posts-> где ('...') '. Благодарю. – JasonK

+0

Есть ли какие-либо проблемы, пока нам нужен упорядоченный результат в одной переменной $ postsOrdered & un-ordered result в $ posts posts = new Post; $ posts = $ posts-> где ('...'); $ posts = $ posts-> orWhere ('...'); $ postsOrdered = $ posts-> orderBy ('...'); ... $ posts = $ posts-> get(); На результат $ posts влияет верхняя часть, на которую упорядочиваются $ posts. Как я могу это преодолеть. –