【问题标题】:Saving many-to-many data in laravel在 laravel 中保存多对多数据
【发布时间】:2017-09-20 16:58:16
【问题描述】:

我正在尝试使用 laravel 创建一个简单的博客。

不幸的是,我在尝试通过雄辩的多对多关系将标签附加到新帖子时迷路了。

任何帮助将不胜感激:

型号:

//post.php
public function blogTags(){
    return $this->belongsToMany('BlogTag', 'blogTag_post', 'post_id', 'blogTag_id');
}

//BlogTag.php
public function posts(){
    return $this->belongsToMany('Post', 'blogTag_post', 'blogTag_id', 'post_id');
}

从视图标记html($categories从get方法传入):

<h3> Tags </h3>
    <select multiple class="form-control" id="tag">
        @foreach ($categories as $category)
        <option value="{{$category->id}}">{{$category->name}}</option>
        @endforeach
    </select>
</div>

我的控制器中的存储功能

$post = new Post();
$post->post_title  = Input::get('post_title');
$post->month = Input::get('month');
$post->date = Input::get('date');
$post->post_body    = Input::get('post_body');
$post->picture_path = $destinationPath ."/". $filename;
$post->post_author = $author;
$post->save();

foreach (Input::get('tag') as $tagId) {
    // look up the existing Tag by ID
    $tag = BlogTag::find($tagId);

    // save the Tag on the Post
    $post->blogTags()->save($tag);
}

我想我已经在兜圈子了。

具体来说,我的问题是:

  • 如何将多个值从选择输入发送到我的控制器方法?
  • $post-&gt;blogTags()-&gt;save($tag); 是使用 eloquent 将数据附加到数据透视表的正确方法吗?

TIA

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    问题是视图中的选择输入。

    所以我改变了这个:

    <select multiple class="form-control" id="tag">
                    @foreach ($categories as $category)
                    <option value="{{$category->id}}">{{$category->name}}</option>
                    @endforeach
                </select>
    

    {{Form::select('tag[]', $categories, null, array('multiple' => true));}}
    

    现在正在将多对多关系数据保存在数据库中。

    【讨论】:

      【解决方案2】:

      您在第一次尝试时遇到的问题不是您没有使用 Laravel Form 辅助方法,而是您没有将多个数据作为数组传递,并且选择元素缺少一个名称属性。通过包含名称,您将获得一个传递的值,但只有一个。使用数组表示法 (foo[]) 是允许多个值的原因。

      如果您想在 html 中执行以下操作,也应该可以:

      <select multiple name="tag[]" class="form-control" id="tag">
          @foreach ($categories as $category)
              <option value="{{$category->id}}">{{$category->name}}</option>
          @endforeach
      </select>
      

      顺便说一句,在您尝试将 $tag 保存到帖子之前,我还会有条件地检查 $tag 是否存在。

      【讨论】:

        猜你喜欢
        • 2014-05-20
        • 2014-05-31
        • 2018-03-20
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2013-08-17
        • 2018-07-11
        相关资源
        最近更新 更多