首页 文章

无法添加或更新子行laravel 5.4多对多关系

提问于
浏览
0

在很多人加入我得到这个错误:

SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(laravel.posts_tag,CONSTRAINT posts_tag_tag_id_foreign FOREIGN KEY(Tag_ID)REFERENCES标记(ID)ON DELETE CASCADE)(SQL:插入到Posts_Tag(Posts_ID,Tag_ID)值(26,Tag num 2))

我的控制器:

public function Share(Request $request)
{

    $posts = Posts::create($request->all());

    $posts->tags()->attach(Input::get('Tag'));

    return $posts;

    return Redirect()->back();

}

我的模特:

public function tags()
{
    return $this->belongsToMany('App\Tag', 'Posts_Tag', 'Posts_ID', 'Tag_ID');
}

观点:

{{ Form::open(array('url'=>'post')) }}

            {{ Form::label('Title') }} : {{ Form::text('Title') }}
            <br>
            {{ Form::label('Content') }} : {{ Form::textarea('Content') }}
            <br>
            {{ Form::label('Tag :') }}
            <select name="Tag" id="Tag" class="Tag">
                @foreach($tag as $tag)
                    <option>{{ $tag->Tag }}</option>
                @endforeach
            </select>
            <br>
            {{ Form::submit('Share Post') }}

            {{ Form::close() }}

2 回答

  • 0

    因为您没有传递任何标记ID,请填写选项的值

    <select name="tags" id="Tag" class="Tag">
                    //tags is a better name for collection of tgas
           @foreach($tags as $tag)
                  <option value='{{$tag->id}}'>{{ $tag->Tag }}</option>
           @endforeach
    </select>
    

    在你的控制器

    $post->tags()->attach($request->tags);
    
  • 1

    您不能将实际标记名称与 attach() 一起使用 . 因为您要传递名称而不是ID,所以您需要先获取标记ID:

    $post = Posts::create($request->all());
    $tagId = Tag::where('name', $request->tag)->value('id');
    $post->tags()->attach(tagId);
    

相关问题