2013-06-18 2 views
3

я столкнулся с некоторыми проблемами с моим переключателем, где я приложу все доступные категории вLaravel поместить массив в переключатель

В моем контроллере я использую этот надрез:

return View::make("stories.add") 
     ->with("title","Indsend novelle") 
     ->with("categories", Category::all()); 

На моем взгляде, я пытаюсь поставить все категории в переключатель с этим:

{{Form::select("category", $categories)}} 

Я мог бы сделать это, но это не будет работать, потому что форма :: выбрать должно быть как массив?

@foreach ($categories as $category) 
    {{$category->name}} 
@endforeach 

Что делать?

Я сделал это, и он работает, но он выглядит слишком уродливым и не является удобным для пользователя, любые предложения?

$test = Category::all(); $myArray = array(); 
    foreach ($test as $o): 
      $myArray[] = $o->name; 
    endforeach; 

    return View::make("stories.add") 
     ->with("title","Indsend novelle") 
     ->with("categories", $myArray); 

var_dump:

array(2) { 
     [0]=> 
     object(Category)#36 (5) { 
     ["attributes"]=> 
array(4) { 
    ["id"]=> 
    string(1) "1" 
    ["name"]=> 
    string(12) "Alderforskel" 
    ["created_at"]=> 
    string(19) "0000-00-00 00:00:00" 
    ["updated_at"]=> 
    string(19) "0000-00-00 00:00:00" 
} 
["original"]=> 
array(4) { 
    ["id"]=> 
    string(1) "1" 
    ["name"]=> 
    string(12) "Alderforskel" 
    ["created_at"]=> 
    string(19) "0000-00-00 00:00:00" 
    ["updated_at"]=> 
    string(19) "0000-00-00 00:00:00" 
} 
["relationships"]=> 
array(0) { 
} 
["exists"]=> 
bool(true) 
["includes"]=> 
array(0) { 
} 
} 
     [1]=> 
    object(Category)#39 (5) { 
    ["attributes"]=> 
    array(4) { 
    ["id"]=> 
    string(1) "2" 
    ["name"]=> 
    string(7) "Bondage" 
    ["created_at"]=> 
    string(19) "0000-00-00 00:00:00" 
    ["updated_at"]=> 
    string(19) "0000-00-00 00:00:00" 
} 
["original"]=> 
array(4) { 
    ["id"]=> 
    string(1) "2" 
    ["name"]=> 
    string(7) "Bondage" 
    ["created_at"]=> 
    string(19) "0000-00-00 00:00:00" 
    ["updated_at"]=> 
    string(19) "0000-00-00 00:00:00" 
} 
["relationships"]=> 
array(0) { 
} 
["exists"]=> 
bool(true) 
["includes"]=> 
array(0) { 
} 
} 
} 
+0

Вы используете Laravel 3 или 4 Laravel? Вам нужно только отметить это одним. –

+0

Я использую laravel 3 –

+0

В laravel 4 вы можете использовать Category :: all() -> all() для преобразования 'Collection' в массив. –

ответ

4

Что вам нужно сделать, это дать Form::select() массив имен категорий и их идентификаторов. Если вы перебираете категории, вы можете их заполнить, а затем передать их Form::select().

$categories = Categories::all(); 
$selectCategories = array(); 

foreach($categories as $category) { 
    $selectedCategories[$category->id] = $category->name; 
} 

return View::make("stories.add") 
     ->with("title","Indsend novelle") 
     ->with("categories", $selectCategories); 
+0

Говорит, что «выщипывание» не существует. –

+0

@kimlarsen См. Edit –

2

Что вам нужно сделать, это вместо того, чтобы использовать эту функцию с() с учетом кладет внутри функции контроллера.

$categories = Category::all(); 

После этого вам нужно правильно восстановить массив:

$category = array(); 
foreach($categories as $cat) 
{ 
    $category[]['id'] = $cat->attributes['id']; 
    $category[]['name'] = $cat->attributes['name']; 
} 

сейчас в View :: сделать()

return View::make("stories.add",array('title'=> "Indsend novelle","categories", $category)); 

Я надеюсь, что это может быть какой-то помощи.

+0

Не работает. Если более 1 категории, он отображает идентификатор вместо имени, где имя должно быть в

+1

sorry kim my mist Я сделал изменение в цикле foreach, сделайте это изменение в своем скрипте и Надеюсь, это должно сделать трюк. –

9

Используйте это следующим образом:

$categories = Category::lists('name', 'id'); 

return View::make('....', compact('categories')); 

и теперь в представлении:

{{ Form::select('selectName', $categories, null); }} 

Edit: Найдено в документации Query builder # Select Посмотрите на этот

+0

Не тестировали, но это работает, это гладкий синтаксис! –

0

Мне нравится подход, предложенный Israel Ortuño

Я бы добавил только небольшую модификацию, чтобы выбор начинался с пустой опции «Выберите из списка» по умолчанию.

$categories = array(0=>'Choose from the list') + Category::lists('name', 'id'); 

return View::make('....', compact('categories')); 


Теперь выпадающий выглядит следующим образом:

<option value="0">Choose from the list</option> 
<option value="{whatever-the-category-id}">Category 1</option> 
... 
Смежные вопросы