结合Select2实现多对多
打赏作者

chenxin

这个select2不错,谢了!

liudong0763

老师,模型的lists方法是什么,返回什么?

JellyBool 回复 liudong0763

返回 key => value 这种形式的键值对, 5.2 之后你可以直接使用 pluck

liudong0763 回复 JellyBool

好的,谢谢老师

Kwong Yan Chan

Hi,Jelly。我想请教一下,我用原生html标签做了表单那一块的页面胆码,但select标签,编辑页面怎么让他显示 getTagListAttribute没作用到页面上呢,

搞定了。。。。。。

Ruanjun

###你好,这里我有一个疑问

setAttribute这个方法是blade模板里面如果有对应的属性的值,就就会去找模型里面的对应的setAttribute这个方法对吗
Ruanjun

setAttribute这个方法在页面加载的时候如果blade模板里面有对应的属性就会处理—我的这种理解对吗

JellyBool 回复 Ruanjun

可以这样理解吧,保存入库之前做的预处理

Ruanjun 回复 JellyBool

非常感谢你的回复,我又看了一遍你的视频,我结合比的回复:
如果是入库之前的预处理,但是blade模板加载的时候怎么会产生默认选中的效果呢—这里是不是这样的不论是哪里只要有对应的属性,都会在对应的model中找对应的方法。

JellyBool 回复 Ruanjun

但是blade模板加载的时候怎么会产生默认选中的效果呢

这个是 getAttributes 的效果吧

Ruanjun 回复 JellyBool

抱歉我搞错了,getAttributes 这个方法可以怎么理解

JellyBool 回复 Ruanjun

显示之前预处理

假如_丶

在哪里调用getTagListAttribute了…没看懂啊 - -

JellyBool 回复 假如_丶

自己就调用了啊。。。

假如_丶 回复 JellyBool

我按照视频写上去了,没有自动调用啊 - -

JellyBool 回复 假如_丶

可否把相关代码贴出来看看?

假如_丶 回复 JellyBool
    // Models
   /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function tag()
    {
        return $this->belongsToMany(Tag::class);
    }

    /**
     * @return mixed
     */
    public function getTagListAttribute()
    {
        return $this->tag()->pluck('id')->all();
    }
    // view
<select name="tag_id[]" class="tag_id form-control" multiple>
        @foreach($tags as $value => $key)
                <option value="{ $value }">{ $key }</option>
        @endforeach
</select>
JellyBool 回复 假如_丶

你有使用 Form::model 么?你有使用 Form 这个 package 么?

假如_丶 回复 JellyBool

并没有用Form package,原生的写法 - -

JellyBool 回复 假如_丶

原生的写法触发不了的。

以后还是先多看视频,照着视频的来先吧,理解完视频内容再弄这些吧。你问的这些问题基本上视频全部都有的

假如_丶

错误经验分享

laravel 5.4 使用Form::model在修改没有出现相应的标签

// 视频中写法
{ Form::select('tag_id[]', $tags, null, ['class'=>'tag_id form-control','multiple'=>'multiple']) }
// getTagListAttribute 没有加载出来可以用下面这个方式
{ Form::select('tag_id[]', $tags, $discuss->tag->pluck('id'), ['class'=>'tag_id form-control','multiple'=>'multiple']) }
JoouA

老师为什么laravel5.4的select2的css和js要这样放

<script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script>
<script src="http://cdn.bootcss.com/select2/4.0.1/js/select2.full.min.js"></script>

才可以,放在head里面不行呢

JellyBool 回复 JoouA

放在head里面不行呢?

这个具体是什么?注意加载顺序就可以

JoouA 回复 JellyBool

如果将select2的js文件放在,

<link href="{ asset('css/app.css') }" rel="stylesheet">
<link href="http://cdn.bootcss.com/select2/4.0.1/css/select2.min.css" rel="stylesheet">

下面的话,会报错显示select2 不是一个function,所以我将jquey和select2.js放在

下面就可以了,照着老师的做法把css,jquery和select2.js放在head里面就是达不到和老师一样的效果
JellyBool 回复 JoouA

报错显示select2 不是一个function

啊哈,这个需要注意的就是这些 js 的加载顺就 OK