标签: many-to-many

如何使用 MongoDB 正确设计配方/成分的数据模型

最近我使用 Hackalode 设计了一个数据库模型或 ERD。所以我目前面临的问题是,根据我当前的设计,我无法按照我的意愿正确查询它。我用 MYSQL 研究了 ERD,确实知道 Mongo 的工作方式不一样

这个想法很简单,我想要一个包含一系列成分列表的食谱,并且这些成分来自单独的集合。配方还包括成分的测量,即。(1汤匙糖)

还可以从配料表中查询,找到包含该配料的菜谱

我希望这个集合处于多对多关系,并且配方可以使用数据库中已有的成分。

目前的数据模型设计

我只是不知道如何查询数据

我通过使用 $elemMatch 和 populate 尝试了很多方法,结果我得到的只是空数组列表。

我期待两种类型的查询,我可以按成分名称或配方进行查询

我的预期结果是这样的

[{
   id: ...,
   name: ....,
   description: ...,
   macros: [...],
   ingredients: [
   {
       id,
       amount: ....,
       unit: ....
       ingredient: {
           id: ....,
           name: ....
       }
   }
}, { ... }]
Run Code Online (Sandbox Code Playgroud)

但不是得到

[]
Run Code Online (Sandbox Code Playgroud)

database erd many-to-many mongodb mongodb-query

1
推荐指数
1
解决办法
5080
查看次数

如何在 Django 中使 m2m_changed 信号原子化?

我的项目中有以下模型:

class Topping(models.Model):
    name = models.CharField(max_length=255)

class Pizza(models.Model):
    name = models.CharField(max_length=255)
    toppings = models.ManyToManyField(Topping, blank=True)

    def save(self, *args, **kwargs):
        print('Saving...')
        if self.pk:
            for topping in self.toppings.all():
                print(topping.name)

        super(Pizza, self).save(*args, **kwargs)

def toppings_changed(sender, instance, **kwargs):
    instance.save()

m2m_changed.connect(toppings_changed, sender=Pizza.toppings.through)
Run Code Online (Sandbox Code Playgroud)

基本上,每当toppings发生变化时,都会触发信号。信号所做的只是调用Pizza对象的 save 方法。无论如何,假设我有三个对象:

pizza = Pizza.objects.get(pk=1) # Number of toppings is 0
topping1 = Topping.objects.get(pk=1)
topping2 = Topping.objects.get(pk=2)
Run Code Online (Sandbox Code Playgroud)

现在,我想将这两种配料添加到我的披萨中。我使用以下代码执行此操作:

pizza = Pizza.objects.get(pk=1)
pizza.toppings.set([1, 2])
Run Code Online (Sandbox Code Playgroud)

配料设置正确,但是,披萨的 save 方法被调用两次,因为 m2m_changed 信号被调用两次,因为发生了两次更改。在提交所有更改后,如何才能仅调用一次?为了澄清,我希望添加两种配料,但我只想在所有更改结束时触发一次信号。谢谢你的帮助。

django many-to-many django-models django-orm

1
推荐指数
1
解决办法
1175
查看次数

EF Core 5 与同一个表的多对多关系?

一个产品可以有许多其他相关产品。以下内容完美地创建了联接表,但是当我将一个产品添加到另一个产品的相关产品时,我在保存时收到以下错误:“尝试保存更改时,‘ProductAssociation.ProductID’的值未知。” 这是因为该属性也是外键的一部分,而关系中的主要实体是未知的。

modelBuilder.Entity<Product>()
                .HasMany(x => x.RelatedProducts)
                .WithMany(r => r.RelatedProducts)
                .UsingEntity<ProductAssociation>(
                    x => x.HasOne(p => p.RelatedProduct).WithMany().HasForeignKey(f => f.RelatedProductID),
                    x => x.HasOne(p => p.Product).WithMany().HasForeignKey(f => f.ProductID).OnDelete(DeleteBehavior.NoAction),
                    x => x.ToTable("ProductAssociations"));
       
Run Code Online (Sandbox Code Playgroud)

many-to-many entity-framework-core

1
推荐指数
1
解决办法
2506
查看次数

Django中3个表之间的多对多关系

我有以下型号:

class Project(models.Model):
    project_name = models.CharField(max_length=50)
    project_users = models.ManyToManyField('Users.UserAccount', related_name='project_users', blank=True)
    ....

class UserAccount(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=30, unique=True)
    ....

class Discipline(models.Model):
    name = models.CharField(unique=True, max_length=27, choices=discipline_choices)
Run Code Online (Sandbox Code Playgroud)

的数据库表project_users如下所示:

*--------*----------------*---------------------*
|   ID   |   project_id   |   user_account_id   |
*--------*----------------*---------------------*
Run Code Online (Sandbox Code Playgroud)

我想在project_users字段/表中与Discipline模型建立额外的关系。这在 Django 中可能吗?我一直在研究Django 中的中介多关系,但这并不是我想要的。在我的应用程序中,有一定数量的学科,我想要实现的是在单个项目中为每个用户提供多个学科。所以像这样:

*--------*----------------*---------------------*-------------------*
|   ID   |   project_id   |   user_account_id   |   discipline_id   |
*--------*----------------*---------------------*-------------------*
Run Code Online (Sandbox Code Playgroud)

这可能吗?

python django many-to-many

1
推荐指数
1
解决办法
2177
查看次数

帮助多对多关系

我的表中存在多对多关系的问题,这是在培训中心工作的员工和讲师之间.我找不到它们之间的联系,我不知道如何得到它.员工字段是:

  • 员工号.
  • 员工姓名
  • 公司名
  • 部门职称
  • 商业领域
  • 手机号码
  • EXT
  • 排行

教师领域是

  • 教练姓名
  • 研究所
  • 手机号码
  • 电子邮件地址
  • 费用

database many-to-many

0
推荐指数
2
解决办法
344
查看次数

LINQ,存储库模式和多对多关系

我在保存对数据库的更改方面存在问题,我正在使用LINQ2SQL映射.我已经基于以下教程实现了M:M关系(User <= UserRole => Role):http://www.codeproject.com/KB/linq/linqtutorial2.aspx#premain25

当我使用一个继承自DataContext并负责我所有域类的类时,一切正常,例如:

[数据库]公共类BookCatalog:DataContext {//创建静态DataContext以删除M:M Join记录私有静态DataContext contextForRemovedRecords = null;

public BookCatalog() : base("Data Source=KO2\\SQLSERVER;Initial Catalog=Katalog;Integrated Security=True") { }

public Table<User> Users;
public Table<Role> Roles;
public Table<UserRole> UserRoles;

public static void RemoveRecord<T>(T recordToRemove) where T : class
{
    // Use the static contextForRemovedRecords
    if (contextForRemovedRecords == null)
        contextForRemovedRecords = new BookCatalog();

    Table<T> tableData = contextForRemovedRecords.GetTable<T>();
    var deleteRecord = tableData.SingleOrDefault(record => record == recordToRemove);
    if (deleteRecord != null)
    {
        tableData.DeleteOnSubmit(deleteRecord);
    }
}

// NEW method (not …
Run Code Online (Sandbox Code Playgroud)

linq asp.net-mvc orm many-to-many repository-pattern

0
推荐指数
1
解决办法
1266
查看次数

Grails在同一个表中的多对多关系

我正在使用Grails,我希望有一个单向的多对多关系.

在我的应用程序中,员工可以"标记"另一个员工,以便快速访问它们以留下笔记.员工无需知道谁为他们添加了书签.

换句话说,我基本上想拥有一个employee.bookmarks可以用于此的属性.

到目前为止,我已经找到了关于 Grails ORM 的多对多关系文档,但这似乎只是在两个不同的表中.

grails groovy many-to-many grails-orm

0
推荐指数
1
解决办法
806
查看次数

MySQL多对多关系问题

我在mysql中3个表artists tracks,并artist_tracks 和我做了什么是写在这个 aricle.

这是表artist:artist_id,artist_name tracks:track_id,track_name artist_tracks: artist_id,track_id

我怎样才能防止artist_tracks表中的重复行?

mysql many-to-many

0
推荐指数
1
解决办法
508
查看次数

ManyToMany与symfony2 orm doctrine中的额外字段的关系

嗨,我有同样的问题:与额外字段的多对多自我关系?但是我找不到答案:/我先尝试了ManyToOne和其他网站OneToMany ...但后来我无法使用类似的东西

    public function hasFriend(User $user)
{
    return $this->myFriends->contains($user);
}  
Run Code Online (Sandbox Code Playgroud)

因为有一些这个问题:

This function is called, taking a User type $user variable and you then use the contains()      function on $this->myFriends.
Run Code Online (Sandbox Code Playgroud)

$ this-> myFriends是一个请求的ArrayCollection(与User不同的类型)和关于contains()的doctrine文档:

The comparison of two elements is strict, that means not only the value but also the type must match.
Run Code Online (Sandbox Code Playgroud)

那么用额外的字段解决这个ManyToMany关系的最佳方法是什么?或者,如果我回去设置onetomany和manytoone关系,我怎么能修改hasFriend方法?例如,检查ID是否在ID的数组集合中.

编辑:我有这张桌子...我需要的是:1.选择我的朋友......和我的粉丝......检查我是不是和他在一起.(因为他可以和我成为朋友,我不必和他在一起......就像在推特上一样).我可以做很多事,但我需要额外的字段,如:"查看""他订阅我的时间",你可以在我的桌子上看到.

并进行这样的查询,然后能够在树枝检查if(app.user.hasFriend(follower)或类似的东西)

           $qb = $this->createQueryBuilder('r')
                  ->select('u')
                  ->innerJoin('UserBundle:User', 'u')
                  ->Where('r.friend_id=:id')
                  ->setParameter('id', $id)
                  ->orderBy('r.time', 'DESC')
                  ->setMaxResults(50);

    return $qb->getQuery()
              ->getResult();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

orm entity-relationship many-to-many symfony

0
推荐指数
1
解决办法
5586
查看次数

Symfony2,关系表格中的manyToMany

我开始学习sf2,非常酷,因为我的问题我有两个表:

媒体

/**
 * @ORM\ManyToMany(targetEntity="Test\SiteBundle\Entity\Website", inversedBy="medias")
 * @ORM\JoinTable(name="media_website")

private $websites;
Run Code Online (Sandbox Code Playgroud)

网站

/**
 * @ORM\ManyToMany(targetEntity="Test\SiteBundle\Entity\Media", mappedBy="websites")

private $medias;
Run Code Online (Sandbox Code Playgroud)

在我的MediaType.php中我有这个:

$builder
        ->add('title')
        ->add('website', 'entity', array(
            'class'         =>  'TestSiteBundle:Website',
            'property'  =>  'name',
            'query_builder' => function(WebsiteRepository $er)use($user_id) {
                               return $er->getMyWebsites($user_id);
             },
            'multiple'=>false))
Run Code Online (Sandbox Code Playgroud)

最后,在枝条页面中我有这个:

<div class="form-group">
   {{ form_label(form.description, "Description", { 'label_attr': {'class': 'control-label col-md-2'} }) }}
   <div class="col-md-5">
        {{ form_widget(form.description, { 'attr': {'class': 'form-control'} }) }}
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

当我尝试添加媒体时出现此错误:

Neither the property "websites" nor one of the methods "setWebsites()", "__set()" or "__call()" exist and …
Run Code Online (Sandbox Code Playgroud)

many-to-many symfony-forms symfony doctrine-orm

0
推荐指数
1
解决办法
1250
查看次数