如何在hasMany关系Laravel中存储多个记录?

时间:2020-11-09 09:25:04

标签: laravel

我有两个模型(Post和Tag),我需要在Post上附加多个标签。单个标签附加可以正常工作,但是我很难将其设置为多个。

模型(发布):

public function tags()
{
    return $this->hasMany('App\Models\Tag', 'id', 'tag_id');
}

控制器(发布):

public function store()
{
    ...
    $posts->tag_id = $data['tag_id'];
    ...
}

刀片(创建后表格):

<select name="tag_id">
    @foreach($tags as $tag)
        <option value="{{ $tag->id }}">{{ $tag->title }}</option>
    @endforeach
</select>

如何将多个标签保存为关系?

1 个答案:

答案 0 :(得分:0)

->首先,您需要使select使用多个选项,例如:

>>> import numpy as np
>>> a = np.array([0, 1, 2, 3])
>>> t = np.array([1, 2, 3])
>>> res1 = t * a[:, None]
>>> res1
array([[0, 0, 0],
       [1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

,请注意,我将其命名为选择 tagIDs [] ,因此它将选择的值作为数组发送。

->其次,我假设帖子和标签之间的关系是ManyToMany。因此,您有一个数据透视表 post_tag ,其中具有列 post_id tag_id

在您的帖子控制器中:

<select name="tagIDs[]" multiple>
    @foreach($tags as $tag)
        <option value="{{ $tag->id }}">{{ $tag->title }}</option>
    @endforeach
</select>

同步的作用是将您在请求中发送的标签ID同步到帖子(也可以在更新帖子中使用)