2013-07-02 3 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')); 

    } 

Ceci est mon code dans le contrôleur. J'utilise un bundle de démarrage disponible sur GitHub.Laravel 4 où comme clause

J'ai créé ce modèle pour ce contrôleur

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

Le problème est qu'il ne prend pas les résultats dont le titre contient « Lorem ipsum ». Il imprime simplement toutes les valeurs de la table.

Comment puis-je implémenter ceci pour obtenir uniquement les valeurs qui contiennent mon tag/mot-clé. Je fais cela pour ajouter l'option de recherche sur le site Laravel

Répondre

1

Essayez cette ...

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

Ou quelque chose le long de ces lignes ...

recherche $ étant votre entrée

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

EDIT

Que pensez-vous de cela?

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

Je l'ai déjà vu votre message dans une autre question. Cela me donne l'erreur – harishannam

+0

Appel à la méthode indéfinie Illuminate \ Database \ Query \ Builder :: raw_where() – harishannam

+0

Dans Laravel 4 la méthode est 'whereRaw' et non' raw_where'. Avoir un petit coup dans la source vous dira rapidement les noms des méthodes. –

0

Je pense qu'il avait un problème avec les contraintes de chargement Laravel Désireuse implémentations:

Pour ref: -

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

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

Pourquoi ne pas créer un cadre pour cela? Avez-vous lu scopes docs? Voici un exemple, comment aurais-je réalisé que:

Le champ d'application:

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

et modification de votre action:

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

Wow .. semble que je suis un peu en retard, bien que cette information serait utile –