Я использую плагин select2 jquery и привязку модели формы laravel для рендеринга данных с сервера.
Хотя все остальное работает нормально, теги, прикрепленные к сообщению, не отображаются в качестве выбранной опции.
должно быть что-то, о чем я не знаю, вот часть моего взгляда.
<div class="form-group">
{!! Form::label('tag_list','Tags:') !!}
{!! Form::select('tag_list[]', $tags,null,['id'=>'tag_list', 'class'=>'form-control','multiple']) !!}
</div>
// This is the select 2 script
$('#tag_list').select2({
'placeholder':'Choose Tags',
tags:true,
tokenSeparators:[",", " "],
createTag:function(newTag){
return{
id:'new:' + newTag.term,
text:newTag.term + '(new)'
};
}
});
И это функция getTagListAtrribute в модели Article
// Это функция getTagListAttribute
public function getTagListAttribute(){
return $this->tags->lists('post_id')->all();
}
И я загружаю форму редактирования из контроллера следующим образом:
public function article_edit($slug){
// fetch the articles.
//$article = DB::table('articles')->where('slug',$slug)->first();
$article = Article::where('slug',$slug)->first();
/*echo '<pre>';
print_r($article->title);
die();*/
$tags = DB::table('tags')->lists('name','tag_id');
$categories=DB::table('categories')->lists('category_name','category_id');
return view('admin.pages.edit', compact('article','tags','categories'));
}
Я просто хочу, чтобы теги, связанные со статьей, были выбраны во время загрузки страницы, и я не смог этого сделать. Так что мне нужна помощь.
Ну, так как вы пометили вопрос как laravel-5.1
, Внесены некоторые изменения в lists
метод.
В Laravel 5.0. * Он возвращал только простой массив keys
и / или values
что вы проходите в lists
метод. Больше информации здесь
В Laravel 5.1. * Он возвращает объект Collection. Больше информации — просто документация кода
Итак, решение, которое вы ищете:
В контроллере сделайте это:
$tags = DB::table('tags')->lists('name','tag_id')->toArray();
Или в файле представления сделайте это:
{!! Form::select('tag_list[]', $tags->toArray(), null,['id'=>'tag_list', 'class'=>'form-control','multiple']) !!}
И это должно помочь вам.
РЕДАКТИРОВАТЬ 1:
Удалить all()
метод из getTagsListAttribute()
, Это совсем не обязательно.
Почему вы используете DB
Фасад для запроса tags
Таблица ? Поскольку вы уже установили отношения, вы без необходимости выполняете SQL Statements
, Избегайте этого столько, сколько сможете.
Вы должны получить это, просто сделав это:
$tags = $article->tags;
РЕДАКТИРОВАТЬ 2:
Вы уверены, что у вас есть tag_id
колонка в tags
Таблица ? Я сомневаюсь, что. Я полагаю, это опечатка. По ошибке вы должны были набрать tag_id
вместо id
, Пересмотрите это для подтверждения.
Надеюсь, что это помогает вам. Удачного кодирования. Приветствия.
Установить тег выбора формы, как это
{!! Form::select('tag_list', $tags, $selected, ['id'=>'tag_list', 'name'=>'tag_list[]','class'=>'form-control','multiple']) !!}
Передайте идентификаторы, которые будут выбраны как массив в третьем ($ selected).
Так что если
$tags = ['1'=>'one', '2'=>'Two', '3'=>'Three']
и если вы хотите выбрать один и три, передайте эти идентификаторы в виде массива в форму, выбранную в качестве третьего параметра.
итак, $ selected = [1,3];