gpt4 book ai didi

mysql - 使用 Eloquent 实现 Laravel 4 数据透视表

转载 作者:行者123 更新时间:2023-11-29 12:45:20 27 4
gpt4 key购买 nike

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

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

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

  1. 将shared_resource添加到shared_resources表
  2. 将标签添加到标签表
  3. 将shared_resource_id和tag_id添加到shared_resource_tag表

我可以设法完成步骤 1 和 2,但由于某种原因,我无法在数据透视表中输入任何条目。我不知道为什么。我相应地在我的模型中设置了关系:

共享资源:

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) 

我对发生的事情感到非常困惑,我知道 Eloquent 使实现这些 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();

您可以找到更多信息here使用同步附加多对多模型

关于mysql - 使用 Eloquent 实现 Laravel 4 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com