首页 > 解决方案 > Laravel 7多选一对多关系

问题描述

我正在尝试获取多选的选定保存值,但没有成功。

我有以下代码:

public function tag()
    {
        return $this->belongsToMany(Tag::class, 'tags_dashboard', 'dashboard_id', 'tag_id');
    }

我希望选择选定的值。这似乎不起作用:

<select id="tags" name="tags[]" class="form-control" multiple>
        @foreach($tags as $tag)
          <option value="{{$tag->id}}" @foreach($tags as $dashboard->tag) {{ in_array($tag->id, $dashboard->tag) ? "selected" : null }} @endforeach>{{$tag->name}}</option>
        @endforeach
</select>

它给出了错误in_array() expects parameter 2 to be array, object given

标签: phplaravel

解决方案


你那里的逻辑是正确的,这只是语法/符号问题

代替:

in_array($tag->id, $dashboard->tag)

采用:

in_array($tag->id, $dashboard->tag()->pluck("tags.id")->toArray())

解释:

  • $tag->id返回 ID(来自数据库的整数)
  • 由于您已经定义了仪表板和标签之间的关系(使用 belongsToMany 函数),您只需要获取一个包含变量的所有标签 ID 的数组$dashboard
  • $dashboard->tag()返回 $dashboard 与其标签之间的关系
  • $dashboard->tag()->pluck("tags.id")返回一个 laravel 集合对象,其中包含 $dashboard 的标签的所有标签 ID
  • $dashboard->tag()->pluck("tags.id")->toArray(): 最后一个 toArray 函数将 laravel 集合对象转换为 php 原生数组

推荐阅读