user9966589
user9966589

Reputation:

How to display selected tags in select option value in laravel?

This is my Post Create View

<div class="col-lg-12">
    <form action="{{ route('admin.post.store') }}" enctype="multipart/form-data" method="post">
        {{ csrf_field() }}
        <div class="form-group">
            <label for="title">Post Title</label>
            <input type="text" class="form-control" value="{{ old('title') }}" name="title" id="title"
                   placeholder="Enter Post Title">
            <span class="text-danger">{{ $errors->first('title') }}</span>
        </div>
        <div class="form-group">
            <label for="slug">Post Image</label>
            <input type="file" class="form-control" name="image" id="image"
                   placeholder="Select Post Image">
            <span class="text-danger">{{ $errors->first('image') }}</span>
        </div>
        <div class="form-group">
            <label for="tags">Select Tags</label>
            <select multiple class="form-control" name="tags[]" id="tags">
                @foreach($tags as $id => $name)
                    <option id="{{ $id }}">{{ $name }}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group">
            <textarea class="body" name="body">{{ old('body') }}</textarea>
            <span class="text-danger">{{ $errors->first('body') }}</span>
        </div>
        <div class="form-group">
            <label for="category">Select Category</label>
            <select class="form-control" name="category" id="category">
                <option value="">Select</option>
                @foreach($cats as $cat)
                    <option value="{{ $cat->id }}">{{ $cat->name }}</option>
                @endforeach
            </select>
        </div>
        <button type="submit" class="btn btn-success btn-block">Publish</button>
    </form>
</div>

Tags have many to many relationship. Here I can select many tags, but in the post edit view I cant see the selected tags that selected by me in the post create view. I want to show selected tags in select option value and edit theme.

post update methods:

public function edit(Post $post)
{
    $tags = Tag::all()->pluck('name', 'id');
    $cats = Category::all();
    return view('admin.post.edit', compact(['post', 'cats', 'tags']));
}

public function update(Post $post, Request $request)
{
    $this->validate($request, [
        'title' => 'required|min:3|max:255',
        'slug' => 'nullable|string',
        'image' => 'sometimes|mimes:jpeg,bmp,png,jpg,gif',
        'body' => 'required',
        'category' => 'nullable',
        'views' => 'nullable',
        'tags' => 'nullable',
    ]);

    $post->title = $request->title;
    $post->slug = $request->slug;
    $post->body = $request->body;
    $post->category_id = $request->category;

    if ($request->hasFile('image')) {
        $image = $request->file('image');
        $filename = time() . '.' . $image->getClientOriginalExtension();
        $location = public_path('images/' . $filename);
        Image::make($image)->resize(800, 400)->save($location);

        $oldfilename = $post->image;

        $post->image = $filename;

        Storage::delete($oldfilename);
    }

    $post->save();

    $post->tags()->sync($request->tags, false);

    Session::flash('update', 'Post Updated Successfully');

    return redirect()->route('admin.post.index');
}

post edit view:

<div class="col-lg-12">
    <form action="{{ route('admin.post.update',$post->id) }}" enctype="multipart/form-data" method="post">
        {{ csrf_field() }}
        {{ method_field('patch') }}
        <div class="form-group">
            <label for="title">Post Title</label>
            <input type="text" class="form-control" value="{{ $post->title }}" name="title" id="title"
                   placeholder="Enter Post Title">
            <span class="text-danger">{{ $errors->first('title') }}</span>
        </div>
        <div class="form-group">
            <label for="slug">Post Image</label>
            <input type="file" class="form-control" name="image" id="image"
                   placeholder="Select Post Image">
            <span class="text-danger">{{ $errors->first('image') }}</span>
        </div>
        <div class="form-group">
            <label for="tags">Select Tags</label>
            <select class="js-example-basic-single form-control" name="tags[]" id="tags" multiple="multiple">

            </select>
        </div>
        <div class="form-group">
            <textarea class="body" name="body">{{ $post->body }}</textarea>
            <span class="text-danger">{{ $errors->first('body') }}</span>
        </div>
        <div class="form-group">
            <label for="category">Select Category</label>
            <select class="form-control" name="category" id="category">
                <option value="">Select</option>
                @foreach($cats as $cat)
                    <option <?php if ($cat->id == $post->category_id) {
                        echo 'selected';
                    } ?> value="{{ $cat->id }}">{{ $cat->name }}</option>
                @endforeach
            </select>
        </div>
        <button type="submit" class="btn btn-primary btn-block">Edit</button>
    </form>
</div>

here:

<div class="form-group">
    <label for="tags">Select Tags</label>
    <select multiple class="form-control" name="tags[]" id="tags">
        @foreach($tags as $id => $name)
            <option id="{{ $id }}">{{ in_array($id,$post->category()->pluck('id')->toArray()) ? 'selected' : '' }}</option>
        @endforeach
    </select>
</div>

how can I pass selected post tags from database and show theme here and edit them.

I am using select2 plugin

In select2 I should pass data in jQuery:

$('.js-example-basic-single').select2().val({{ json_decode($post->tags()->getRelatedIds()) }}).trigger('change');

but it doesnt work :(

and I get this error

Method Illuminate\Database\Query\Builder::getRelatedIds does not exist. (View: C:\Users\M0RT3Z4\Desktop\MyBlog\resources\views\admin\post\edit.blade.php

Please help me, Thanks!

Upvotes: 0

Views: 2268

Answers (1)

lewis4u
lewis4u

Reputation: 15037

You have put the code in wrong place:

Try this:

<div class="form-group">
    <label for="tags">Select Tags</label>
    <select multiple class="form-control" name="tags[]" id="tags">
        @foreach($tags as $id => $name)
        <option id="{{ $id }}" {{ in_array($id,$post->category()->pluck('id')->toArray()) ? 'selected' : '' }}>{{ $name }}</option>
        @endforeach
    </select>
</div>

Upvotes: 1

Related Questions