2013-07-02 2 views
4
public function getIndex() 
     { 


// Get all the blog posts 
     /*$posts = Post::with(array(
      'author' => function($query) 
      { 
       $query->withTrashed(); 
      }, 
     ))->orderBy('created_at', 'DESC')->paginate(10);*/ 


     $posts =Post::with(array('search' => function($query) 
     { 
      $query->where('title', 'like', '%Lorem ipsum%')->withTrashed(); 
     }))->orderBy('created_at', 'DESC')->paginate(10); 


     // Show the page 
     return View::make('frontend/blog/index', compact('posts')); 

    } 

Это мой код в контроллере. Я использую пусковой комплект, доступный на GitHub.Laravel 4 где, как статья

Я создал эту модель для этого контроллера

public function search() 
{ 
    return $this->belongsTo('Post', 'user_id'); 
} 

Проблема заключается в том, что не принимает результаты, где название содержит «Lorem Ipsum». Он просто печатает все значения из таблицы.

Как я могу реализовать это, чтобы получить только значения, содержащие мой тег/ключевое слово. Я делаю это, чтобы добавить функцию поиска на сайте Laravel

ответ

1

Try это ...

$posts =Post::with(array('search' => function($query) 
    { 
     $query->raw_where("title LIKE '%Lorem ipsum%")->withTrashed(); 
    }))->orderBy('created_at', 'DESC')->paginate(10); 

Или что-то вдоль этих линий ...

$ поиска является ваш вклад

Post::raw_where("match (`title`) against (?)", array($search)) 
    ->orderBy('created_at', 'DESC')->paginate(10); 

EDIT

Что относительно этого?

Post::where(DB::raw('MATCH(`title`)'),'AGAINST', DB::raw('("+'.implode(' +',$search).'" IN BOOLEAN MODE)->orderBy('created_at', 'DESC')->paginate(10); 
+0

Я уже видел ваш пост в другом вопросе. Это дает мне ошибку – harishannam

+0

Звонок на неопределенный метод Illuminate \ Database \ Query \ Builder :: raw_where() – harishannam

+0

В Laravel 4 метод 'whereRaw', а не' raw_where'. Прокрутив источник, вы быстро сообщите вам имена методов. –

0

Я думаю, что это была проблема с Laravel жадной загрузки ТРУДНОСТИ реализаций:

Для исх: -

https://github.com/laravel/laravel/pull/1069 

https://github.com/laravel/laravel/pull/946 
9

Почему бы не создать возможности для этого? Вы читали scopes docs? Вот пример того, как бы я добился того, что:

Области:

public function scopeTagged($query, $tag) 
{ 
    return $query->where('title', 'LIKE', '%' . $tag . '%'); 
} 

И модификация ваших действий:

public function getIndex() 

{ 

    $posts = Post::tagged($lorem_ipsum)->withTrashed()->orderBy('created_at', 'DESC')->paginate(10); 

    // Show the page 
    return View::make('frontend/blog/index', compact('posts')); 

} 
+0

Ух ты .. кажется, я немного опоздал, хотя эта информация была бы полезной –