当前位置: 首页 > 知识库问答 >
问题:

将图像标记保存到Laravel中的透视表

商俊智
2023-03-14

请原谅我的新问题,这个问题主要是因为我顽固地缺乏对拉雷维尔多对多关系的理解。

在我的网站上,用户可以上传图片

$images = new Images;
...
$images->save();

伴随着用户自己创建的标签。这些标记存储为一个数组,经过验证,然后检查标记是否存在。如果标签存在,我希望在“tagmap”上有一个条目,将新图像与该标签相关联。如果它不存在,我希望同样的事情发生,但也有一个新的标签被创建。

我有3个表,一个图像表、一个标签表和一个名为“tagmap”的透视表,其中只有“image\u id”和“tag\u id”列。

因此,保存图像后:

$tags = new Tag;        
foreach ($request->tags as $tags ) {
    if(preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $tags)) {
        if (strlen($tags) < 21) {
            if (Tag::where('tagname', $tags)->count() > 0) {
                //store tag_id and image_id association on 'tagmap' table, no need to create new tag because tag exists
            } else {
                //create new tag on the 'tags' table
                //store tag_id and image_id association on 'tagmap' table
            }   
        } else {
            return redirect()->back()->with('info', 'Tags may only contain 20 characters.');    
        }   
    } else {
        return redirect()->back()->with('info', 'Tags may only contain letters and numbers, and must start with letters.'); 
    }
}       
$tags->save();

注释掉的部分是我遇到问题的地方。

这是我的Tag模型:

class Tag extends Model {
  protected $table = 'tags';

  protected $fillable = [
      'tagname',
  ];

  public function Images() {
      return $this->belongsToMany('CommendMe\Models\Images');
  } 
}

在我的图像模型中,我有:

class Images extends Model {

  protected $table = 'images';

  public function tags() {
       return $this->belongsToMany('CommendMe\Models\Tag');
  } 

}

任何帮助都将不胜感激!

共有1个答案

凤伟泽
2023-03-14

如果有适当的命名约定,Laravel会自动执行数据透视表过程。

在这种情况下,您有图像标记,因此您的中介表应该命名为image_tag

然后,如果要将标记与图像关联,可以使用sync()方法。如果以前有关联的标记,则可以使用syncWithoutDetaching()

$image->tags()->sync(['array', 'of', 'tag', 'ids']);

或者,如果您不想破坏现有的关系,您可以使用syncWithouse tDetach()方法

$image->tags()->syncWithoutDetaching(['array', 'of', 'tag', 'ids']);
 类似资料:
  • 当我从前端提交表单数据时,我正试图创建一个新记录,我正在绞尽脑汁思考如何才能做到这一点。我已经找了一些例子,但还没有找到什么好运气。因此,我正在为新的约定提交数据,并且我的约定与任务共享数据透视表关系。这是关系结构。 用户有许多任务 如果我提交数据来存储一个新的约定,同时我还想存储一个新的任务,那么我很难理解应该使用什么方法来完成这项任务。 我确实理解,我需要在填充透视表之前存在参与和任务。 订婚

  • 问题内容: 我有这样的JavaScript代码 我的PHP代码是这样的 执行此代码时,我得到了一个零尺寸的png文件图像?我的代码有什么问题? 问题答案: 我最近不得不自己做。 首先,我将canvasData放入一个隐藏字段中,并将其发布到我的PHP页面中。 它以以下格式返回: 您需要首先拆分数据,因为这是标题信息。其余的是编码数据。 然后,在服务器上创建映像: 然后阅读以完成我想做的事情。 我非

  • 我对JavaCV FFMPEGFrameRecOrder的使用有点困惑。我有几个字节[]或短[]数组(取决于我的图像是8位还是16位),如果我有几个图像的相关数据。现在,我的想法是使用JavaCPP将每个图像发送到ffmpeg,这样它就可以在我希望的framerate上从这个集合中创建一个静音视频。到目前为止,我有: 但我经常犯这样的错误 谢了!

  • 我正在尝试保存数据透视表中多列的数据。但是,数据没有保存。下面是我正在做的事情: 表 刀片 如果我只使用checkbox来同步benefit_id和user_id,它就能工作。但如果添加额外的数据amount1和amount2,则不起作用。 控制器 事先谢谢你的帮助。

  • 这是代码 这里还有一些图片的链接:https://www.dropbox.com/sh/ovzkqomxvzw8rww/AAB2DDCrCF6NlCFre7V1Gb6La?dl=0非常感谢你,拉菲