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
透视表中创建任何条目。我不知道为什么。我在我的模型中相应地设置了关系:
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 );