php - 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
解决方案
你那里的逻辑是正确的,这只是语法/符号问题
代替:
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 原生数组
推荐阅读
- amazon-web-services - AWS RDS 只读副本充当故障转移备用
- php - Omitting item from array, foreach loop wordpress
- c - fgets inside loop 在遇到 EOF 后不等待输入
- python-3.x - 我无法使用 Python 3.7 将 IP 地址打印到文件中
- java - 整数数组,如果有 2 个连续数字是 7 或有两个 7 由一个数字分隔,则返回 true。仅使用 Java 流
- python - 从可调整大小的无边框 Pyglet 窗口中删除顶部的白色边框
- c# - 卡夫卡消费者丢失消息
- azure - 用于多个 Azure 服务的 Azure 自定义域
- python-3.x - 如何比较嵌套列表并将不匹配项追加到python3中的新列表?
- typescript - 打字稿从给定接口缩小类型