Mysql 使用Elounting实现Laravel 4数据透视表

Mysql 使用Elounting实现Laravel 4数据透视表,mysql,laravel,laravel-4,many-to-many,eloquent,Mysql,Laravel,Laravel 4,Many To Many,Eloquent,我的数据库中有以下结构: -共享资源表 -标签表 -共享资源标签表 共享资源和标记之间存在多对多关系。创建共享资源时,我会执行以下操作: 将共享_资源添加到共享_资源表中 将标记添加到标记表中 将共享资源id和标记id添加到共享资源标记表中 我可以设法完成步骤1和2,但由于某些原因,我无法在透视表中创建任何条目。我不知道为什么。我在我的模型中相应地设置了关系: SharedResource: class SharedResource extends Eloquent{ public fu

我的数据库中有以下结构:

-共享资源表 -标签表 -共享资源标签表

共享资源和标记之间存在多对多关系。创建共享资源时,我会执行以下操作:

  • 将共享_资源添加到共享_资源表中
  • 将标记添加到标记表中
  • 将共享资源id和标记id添加到共享资源标记表中
  • 我可以设法完成步骤1和2,但由于某些原因,我无法在
    透视表中创建任何条目。我不知道为什么。我在我的
    模型中相应地设置了关系:

    SharedResource

    class SharedResource extends Eloquent{
        public function tags(){
            return $this->belongsToMany('Tag');
        }
    }
    
    标签

    class Tag extends Eloquent{
        public function sharedResources(){
            return $this->belongsToMany('SharedResource');
        }
    }
    
    然后,当我创建条目时,我会执行以下操作:

            $tags = Array();
            $tags = explode(',', Input::get('tags'));
            foreach($tags as $tag){
                $newTag = new Tag;
                $newTag->name = $tag;
                $newTag->save();
            }
    
            //Pivot table entry
            $resource->tags()->sync($tags);
    
            $resource->save();
    
    上面的代码遇到错误:

    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'shared_resource_id' in 'where clause' (SQL: select `tag_id` from `shared_resource_tag` where `shared_resource_id` is null) 
    
    我很困惑到底发生了什么,我知道
    雄辩
    使实现这些n:n关系变得很容易。

    sync()
    方法需要标记的id,而不是您提供的字符串名称。您可以尝试以下方法:

    $tags = Array();
    $tagIds = Array();
    $tags = explode(',', Input::get('tags'));
    foreach($tags as $tag){
        $newTag = new Tag;
        $newTag->name = $tag;
        $newTag->save();
        $tagIds[] = $newTag->id;
    }
    
    //Pivot table entry
    $resource->tags()->sync($tagIds);
    
    $resource->save();
    

    你可以在
    下找到更多信息,使用Sync连接多对多型号

    不太可能,否则我想我不会花时间把问题打出来……那么你在那张表上有
    共享资源id
    字段吗?我明白你说的@Chris G,尽管关于
    列未找到:1054未知列'shared_resource_id
    ,我仍然收到错误,但在创建透视条目之前,我尝试保存资源,但没有成功work@Javacadabra-您可能需要添加要加入的列名:
    return$this->belongstomy('SharedResource')。从手册中:
    return$this->belongtomany('Role','user_roles','user_id','foo_id')看起来Laravel试图建立一个不存在的连接(给定缺少的列),因此您必须在模型中强制它们覆盖默认操作。
    
        $tags = explode(',', Input::get('tags'));
        // Create or add tags
        $tagIds = array();
    
        if ( $tags )
        {
            $found = $this->tag->findOrCreate( $tags );
            foreach ( $found as $tag )
            {
                $tagIds[ ] = $tag->id;
            }
        }
    
        // Assign set tags to model
        $model->tags()->sync( $tagIds );