标签: many-to-many

如何定义与另一个应用程序的多对多关系?

我有两个应用程序: Ads Domains

广告可以通过多对多与域关联。在我的广告模型中,我放置了:

domains = models.ManyToManyField(Domain)
Run Code Online (Sandbox Code Playgroud)

我该如何使其使用域名应用程序而不是广告应用程序?

谢谢

django many-to-many relationships

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

具有多对多关系的类别和子类别

我正在开始新项目,但不知道从哪里开始。我需要数据库设计,其中有类别和 4 级子类别,但产品可以有多个类别。所以我很困惑我的数据库应该如何。请帮助我。非常感谢您提前给我时间。

many-to-many hierarchy categories

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

SQLAlchemy:过滤多对多连接负载

我当前的表设置用于“单词”和“短语”之间的多对多关联:

association_table_wp = Table('words_phras', Base.metadata,
                             autoload=True,
                             extend_existing=True)

class Phrase(Base):
    __tablename__ = 'phrases'
    __table_args__ = {'autoload': True}

    def __init__(self, phrase, explanation=None, active=False):
        self.phrase = phrase
        self.explanation = explanation
        self.active = active

class Word(Base):
    __tablename__ = 'words'
    __table_args__ = {'autoload': True}

    def __init__(self, word, word_id=None, active=False):
        self.word = word
        self.word_id = word_id
        self.active = active

Word.phrases = relationship(Phrase,
                            secondary=association_table_wp,
                            backref="words")
Run Code Online (Sandbox Code Playgroud)

现在通常当我想查找一些单词及其短语时我使用:

words = db_session.query(Word).filter(Word.id.in_(word_ids)).\
             options(joinedload(Word.phrases)).\
             all()
Run Code Online (Sandbox Code Playgroud)

这允许我访问words[i].phrases与给定单词相关的短语。

现在,这工作正常,但请注意“active”属性。我想过滤单词的短语,以便只active == True返回带有 的短语。如何才能做到这一点?我尝试了几种连接和 eager_loading 的组合,但没有一个像我希望的那样工作。

非常感谢。

python many-to-many sqlalchemy filter

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

多对多关系?

伙计们,我正在尝试为我的公司制作一个简单的票证生成系统,作为一个帮助。现在,我的 MSSQL 数据库中有一个名为 的表tblTicket和另一个名为 的表。tblEngineer

我的应用程序采用 C# Windows 窗体,因此在新的票证生成窗体上,我有许多文本框和一个用于分配工程师的组合框,该工程师由tblEngineer. 生成票证后,在此表单中输入的所有信息都将存储在fromtblTicket中。EngineerIDtblEngineer

它运行得很好,但后来我的客户要求我添加选项,以便可以在一张票上分配 3 名工程师。

将来,我将不得不开发一个“工程师模块”,其中工程师将只能看到分配给他的票证。它将包括用于身份验证目的的登录系统。因此,如果生成了一个新票证并分配给 3 名工程师,则只有 3 名工程师应该能够看到该票证,而其他人则看不到。

我应该如何采用这种方法?如果只有一名工程师,这真的很容易。现在我需要制作一个多对多表,比如tblAssignedEng包含工单 ID 和多个工程师 ID 的表吗?作为外键引用?我对 SQL 没有太多经验,所以我在这里有点挣扎,任何帮助将不胜感激。

sql many-to-many

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

如何使用 Attach 创建新的多对多记录

好吧,我看到了一些关于此的帖子,但我根本不理解附加的概念,我有三个表:

Llistes(列表):

        $table->increments('id');
        $table->string('nom_llista');
        $table->integer('user_id')->unsigned();
    });
Run Code Online (Sandbox Code Playgroud)

康康斯(歌曲):

        $table->increments('id');
        $table->string('titol');
        $table->integer('genere_id')->unsigned();
        $table->integer('artista_id')->unsigned();
        $table->integer('album_id')->unsigned();
Run Code Online (Sandbox Code Playgroud)

数据透视表:llistes_cancons ( lists_songs)

        $table->increments('id');
        $table->integer('id_canco')->unsigned();
        $table->integer('id_llista')->unsigned();
        $table->timestamps();
Run Code Online (Sandbox Code Playgroud)

我还有另外两个课程,我认为这是正确的,但我不确定:

在 Canco.php ( Song.php ) 中:

public function llistescancons_llistes()
{
    return $this->belongsToMany('App\Llista');
}
Run Code Online (Sandbox Code Playgroud)

在 Llista.php ( List.php ) 中:

public function llistescancons_cancons()
{
    return $this->belongsToMany('App\Canco');
}
Run Code Online (Sandbox Code Playgroud)

所以,问题是我如何在我的控制器中实现一个功能,让我可以将新记录添加到数据透视表(多对多),并且如果可能有另一个功能来显示记录,我是 Laravel 的新手,这有点对我来说很难。

many-to-many record attachment eloquent laravel-5

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

实体框架核心多对多关系未从数据库加载

好的,所以我遵循了实体框架核心的“多对多”示例: 关系(在页面末尾)。

似乎在最初创建数据库时(createNew 设置为 true)一切都按预期工作,但是当我使用现有数据库(createNew 设置为 false)时,连接不再存在。以下是一个控制台应用程序,显示了我遇到的问题:

createNew = true 的输出:

作者 1 写道: - 第 1 册 - 第 2 册

作者 2 写道: - 第 1 册 - 第 2 册

作者 3 写道: - 第 4 册

作者 4 已写:还没有书

createNew = false 的输出:

作者 1 已写:还没有书

作者 2 已写:还没有书

作者 3 已写:还没有书

作者 4 已写:还没有书

// Visual Studio 2017
// Console App (.NET Core)
// Nuget: Microsoft.EntityFrameworkCore.SqlServer

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore; …
Run Code Online (Sandbox Code Playgroud)

c# many-to-many entity-framework-core

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

删除多对多:Flask-Sqlalchemy 尝试删除具有特定 id 的每一行

我坚持使用flask和flask-sqlalchemy从MySQL db中删除多对多记录。似乎 sqlalchemy 试图从关系表中删除所有行,其中 a 的 id 与链接到 b 的 id 相同。

错误(示例):

sqlalchemy.orm.exc.StaleDataError: DELETE statement on table 'ksiazka_autor' expected to delete 1 row(s); Only 0 were matched.
Run Code Online (Sandbox Code Playgroud)

或者

sqlalchemy.orm.exc.StaleDataError: DELETE statement on table 'ksiazka_wydawnictwo' expected to delete 552 row(s); Only 551 were matched.

INFO sqlalchemy.engine.base.Engine DELETE FROM ksiazka_kategoria WHERE ksiazka_kategoria.ksiazka_id = %s AND ksiazka_kategoria.kategoria_id = %s
2017-08-29 15:44:34,965 INFO sqlalchemy.engine.base.Engine ((166, 40), (167, 40), (168, 40), (169, 40), (170, 40), (171, 40), (172, 40), (173, 40)  ... displaying 10 …
Run Code Online (Sandbox Code Playgroud)

python many-to-many sqlalchemy flask flask-sqlalchemy

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

PHP Symfony 多对多形式

我的数据库中的两个表之间存在多对多关系(1 篇文章有超过 1 篇好书,反之亦然),所以我制作了一个链接表(bestelregel)。

但现在我想制作一个表格,以便我可以添加包含多个产品的新订单,但由于我对此不熟悉,所以我不知道该怎么做。我尝试为实体 Bestelling 制作一个表格,以便我可以下新订单。并尝试使用另一种表单(基于链接表的表单)将产品添加到订单中,但我收到以下错误:

关联字段“AppBundle\Entity\Bestelregel#$bestelordernummer”的类型“AppBundle\Entity\Artikel”的预期值,改为“AppBundle\Entity\Bestelling”。

我希望你们能帮助我。也许用另一种方式?

我的代码:

实体文章

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Artikel
 *
 * @ORM\Table(name="artikel")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ArtikelRepository")
 */
class Artikel
{

    //Mapping naar de database

     /**
     * @var string
     *
     * @ORM\Column(name="artikelnummer", type="integer", length=20, unique=true)
     * @ORM\Id
     * @Assert\Length(
     *      min = 10,
     *      max = 10,
     *      minMessage = "Minimaal 10 karakters",
     *      maxMessage = "Maximaal 10 karakters"
     *)
     */ …
Run Code Online (Sandbox Code Playgroud)

php forms many-to-many symfony

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

使用部分更新更新模型的多对多字段 - 仅允许非关系和外键

我想使用部分更新来更新模型的多对多字段。但是我收到错误

<django.db.models.fields.related.ManyToManyField: skills> (only non-relations and foreign keys permitted).
Run Code Online (Sandbox Code Playgroud)

这就是我的模型目前的样子

class modelJob(models.Model):
    skills              = models.ManyToManyField(modelSkill,blank=True)
    title               = models.CharField(max_length=200, unique=False,blank=False,null=True)
    moreInfo            = models.CharField(max_length=500, unique=False,blank=False,null=True)
Run Code Online (Sandbox Code Playgroud)

这就是我的序列化器的样子

class Serializer_PartialUpdateJob_RX(serializers.ModelSerializer):
    class Meta:
        model = modelJob
        fields = '__all__'

    def update(self, instance, validated_data):
        modelJob.objects.filter(pk=instance.id).update(**validated_data)
        job = modelJob.objects.get(pk=instance.id)
        return job
Run Code Online (Sandbox Code Playgroud)

这就是我的看法

class PartialUpdate_Jobs(GenericAPIView, UpdateModelMixin):
    queryset = modelJob.objects.all()
    serializer_class = Serializer_PartialUpdateJob_RX
    lookup_field = 'id'

    def put(self, request, *args, **kwargs):
        result =  self.partial_update(request, *args, **kwargs)
        return Response(Serializer_Job_TX(self.queryset[0]).data)
Run Code Online (Sandbox Code Playgroud)

现在我只想更新多对多字段(技能),这就是我的 json 的样子

{
    "skills" :[ 
               2,4
             ]
}
Run Code Online (Sandbox Code Playgroud)

其中 2 …

many-to-many django-models django-rest-framework

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

Django 使用完全相同的查询进行多对多过滤

django 中是否有任何方法可以通过查询集或 ids 列表过滤具有多对多关系的对象。在多对多中获取具有完全相同值的查询。模型

class Parent(models.Model):
    name = models.CharField(max_length=1000)
    children = models.ManyToManyField(Child, blank=True)
Run Code Online (Sandbox Code Playgroud)

意见

def filter_parents(request):
    children = Child.objects.filter(id__in=[1,2,3])
    parents = Parent.objects.filter(child=child)
    return parents
Run Code Online (Sandbox Code Playgroud)

预期:我正在寻找在多对多领域拥有完全相同孩子的过滤父母

django many-to-many

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