Laravel : recherche ou filtrer la collection
J'ai ce problème alors que le filtrage ou la recherche à travers une collection
http://laravel.io/bin/vj115 de vérifier l'url pour le code.
Ce que je suis en train de faire, c'est de filtrer une collection par la méthode get (à partir de l'url, bien sûr)
Mais seulement cela ne fonctionne que lorsque Input::get('category')
a valeur d'autre rien ne fonctionne.
Pourriez vous s'il vous plaît vérifier le code et laissez-moi savoir ce qui doit être fixe?
Grâce.
===== Le Code réel, juste au cas où le lien est rompu à l'avenir (édité)=============
public function anyIndex() {
$id = Input::get('id');
$brand = Brand::firstOrNew(array('id' => $id));
$paginate = Misc::getSettings('admin-pagination');
$page_no = isset($_GET['page']) ? $_GET['page'] : 1;
$i = ($paginate * $page_no) - ($paginate - 1);
$appends = false;
$newBrands = new Brand;
if (Input::get('category')) {
$brandCat = BrandCategory::find(Input::get('category'));
$newBrands = $brandCat->brands();
$appends['category'] = Input::get('category');
}
if (Input::get('status')) {
$status = Input::get('status') == 'published' ? 1 : 0;
$newBrands->where('is_active', '=', $status);
$appends['status'] = Input::get('status');
}
if (Input::get('order_by') || Input::get('order')) {
if (Input::get('order_by')) {
$order_by = Input::get('order_by');
$appends['order_by'] = Input::get('order_by');
} else {
$order_by = 'name';
}
if (Input::get('order')) {
$order = Input::get('order');
$appends['order'] = Input::get('order');
} else {
$order = 'asc';
}
$order = Input::get('order') ? Input::get('order') : 'asc';
$newBrands->orderBy($order_by, $order);
}
$brands = $newBrands->paginate($paginate);
$brand_categories_list = new BrandCategory;
$selected_cats = array();
if ($id != "") {
$selected_cats = $brand->categories->lists('id');
}
return View::make('admin.brands.index')
->with(array(
'selected_cats' => $selected_cats,
'brand' => $brand,
'brands' => $brands,
'brand_categories_list' => $brand_categories_list->lists('name', 'id'),
'appends' => $appends,
'i' => $i
));
}
Merci à Dave.. je l'ai résolu comme :
public function anyIndex() {
$id = Input::get('id');
$brand = Brand::firstOrNew(array('id' => $id));
$paginate = Misc::getSettings('admin-pagination');
$page_no = isset($_GET['page']) ? $_GET['page'] : 1;
$i = ($paginate * $page_no) - ($paginate - 1);
$appends = false;
if (Input::has('category')) {
$brandCat = BrandCategory::find(Input::get('category'));
$newBrands = $brandCat->brands();
$appends['category'] = Input::get('category');
} else {
$newBrands = Brand::limit(-1);
}
if (Input::has('status')) {
$status = Input::get('status') == 'published' ? 1 : 0;
$newBrands->where('is_active', '=', $status);
$appends['status'] = Input::get('status');
}
if (Input::has('order_by') || Input::has('order')) {
if (Input::has('order_by')) {
$order_by = Input::get('order_by');
$appends['order_by'] = Input::get('order_by');
} else {
$order_by = 'name';
}
if (Input::has('order')) {
$order = Input::get('order');
$appends['order'] = Input::get('order');
} else {
$order = 'asc';
}
$order = Input::get('order') ? Input::get('order') : 'asc';
$newBrands->orderBy($order_by, $order);
}else{
$newBrands->orderBy('name', 'asc');
}
$brands = $newBrands->paginate($paginate);
/* $queries = DB::getQueryLog();
$last_query = end($queries);
dd($last_query); */
$brand_categories_list = new BrandCategory;
$selected_cats = array();
if ($id != "") {
$selected_cats = $brand->categories->lists('id');
}
return View::make('admin.brands.index')
->with(
array(
'selected_cats' => $selected_cats,
'brand' => $brand,
'brands' => $brands,
'brand_categories_list' => $brand_categories_list->lists('name', 'id'),
'appends' => $appends,
'i' => $i)
);
}
- Une catégorie est obligatoire ou facultatif paramètre?
- Merci pour la réponse rapide.. facultatif...
- Ne vous obtenez une erreur? Si oui, pouvez-vous coller l'erreur ici?
- je n'obtiens aucune erreur, il juste ne travail avec les catégories.
- je doute que si le problème est avec cette
$newBrands = new Brand;
ligne - sans le filtre habitude de travail.. il va tout simplement tout montrer sans filtes en cours de traitement.
- DONC, si aucune catégorie n'est sélectionnée, le filtre n'a pas de filtre, et si la catégorie dans le filtre est sélectionné, le filtre fonctionne, non?
- le droit.. si la catégorie est sélectionnée autres options de travail aussi..
- Êtes-vous sûr qu'il y a des marques où
is_active
est faux? - Non.. toutes les marques sont is_active = 1 mais il ne fait aucune différence.. comme is_active = 1 devrait travailler trop..
Vous devez vous connecter pour publier un commentaire.
Je soupçonne qu'il a à faire avec la façon dont vous utilisez Éloquent. Vous ne pouvez pas simplement appliquer les méthodes de l'objet s'il a été créé à l'aide de la "nouvelle" mot-clé.
Cela ne fonctionne pas si vous le créer de manière statique avec une méthode.
Courant (DB) fonctionne de la même manière.