标签: many-to-many

SQLAlchemy:按至少一个多对多相关表中的成员身份进行过滤

使用SQLAlchemy 0.7.1和M​​ySQL 5.1数据库,我建立了多对多关系,如下所示:

user_groups = Table('user_groups', Base.metadata,
    Column('user_id', String(128), ForeignKey('users.username')),
    Column('group_id', Integer, ForeignKey('groups.id'))
)

class ZKUser(Base, ZKTableAudit):
    __tablename__ = 'users'

    username   = Column(String(128), primary_key=True)
    first_name = Column(String(512))
    last_name  = Column(String(512))

    groups = relationship(ZKGroup, secondary=user_groups, backref='users')

class ZKGroup(Base, ZKTableAudit):
    __tablename__ = 'groups'

    id          = Column(Integer, primary_key=True)
    name        = Column(String(512))
Run Code Online (Sandbox Code Playgroud)

用户可以属于多个组,而组可以包含多个用户.

我正在尝试做的是构建一个SQLAlchemy查询,该查询仅返回属于组列表中至少一个组的用户.

我玩这个in_函数,但这似乎只适用于测试列表中成员资格的标量值.我不是一个SQL编写者,所以我甚至不知道SELECT这需要什么样的声明.

python mysql many-to-many sqlalchemy

23
推荐指数
2
解决办法
1万
查看次数

Laravel Eloquent ORM - 多对多删除数据透视表值

使用Laravel,我有以下代码

$review = Review::find(1);
$review->delete();
Run Code Online (Sandbox Code Playgroud)

Review具有与Product实体定义的多对多关系.当我删除评论时,我希望它与数据透视表中的相关产品分离,但事实并非如此.当我运行上面的代码时,我仍然看到数据透视表中的链接行.

我在这里错过了什么或者这是Laravel的工作方式吗?我知道这个detach()方法,但我认为删除一个实体也会自动将它从任何相关实体中分离出来.

Review 定义如下:

<?php
class Review extends Eloquent
{
    public function products()
    {
        return $this->belongsToMany('Product');
    }
}
Run Code Online (Sandbox Code Playgroud)

Product 定义如下:

<?php
class Product extends Eloquent
{
    public function reviews()
    {
        return $this->belongsToMany('Review');
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

orm many-to-many laravel eloquent

23
推荐指数
3
解决办法
4万
查看次数

在Entity Framework Core中保存多对多关系

例如,我有3个类,我用它们用于多对多关系:

public class Library
{
    [Key]
    public string LibraryId { get; set; }
    public List<Library2Book> Library2Books { get; set; }
}

public class Book
{
   [Key]
   public string BookId { get; set; }
   public List<Library2Book> Library2Books { get; set; }
}

public class Library2Book
{
    public string BookId { get; set; }
    public Book Book { get; set; }

    public string LibraryId { get; set; }
    public Library Library { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

它们配置为ApplicationDbContext:

protected override void …
Run Code Online (Sandbox Code Playgroud)

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

23
推荐指数
1
解决办法
2万
查看次数

Django ManyToManyField使用直通订购

以下是我的模型设置的片段:

class Profile(models.Model):     
    name = models.CharField(max_length=32)

    accout = models.ManyToManyField(
        'project.Account',
        through='project.ProfileAccount'
    )

    def __unicode__(self)
        return self.name

class Accounts(models.Model):
    name = models.CharField(max_length=32)
    type = models.CharField(max_length=32)

    class Meta:
        ordering = ('name',)

    def __unicode__(self)
        return self.name

class ProfileAccounts(models.Model):
    profile = models.ForeignKey('project.Profile')
    account = models.ForeignKey('project.Accounts')

    number = models.PositiveIntegerField()

    class Meta:
        ordering = ('number',)
Run Code Online (Sandbox Code Playgroud)

然后,当我访问帐户时,如何在中间ProfileAccounts模型中按"数字"排序,而不是在帐户模型中使用默认的"名称"?

for acct_number in self.profile.accounts.all():
    pass
Run Code Online (Sandbox Code Playgroud)

这不起作用,但是我希望它如何访问这些数据的要点:

for scanline_field in self.scanline_profile.fields.all().order_by('number'):
    pass
Run Code Online (Sandbox Code Playgroud)

python django many-to-many

22
推荐指数
4
解决办法
2万
查看次数

与Django唯一的外键对

我有三个模型:产品,用户评论.

审核与产品和用户相关联,如下所示:

class Review(models.Model):
    product = models.ForeignKey(Product)    
    user = models.ForeignKey(User)
    review_text = models.TextField()
    creation_date = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

我想允许每个用户每个产品只提交一次评论.推荐的方法是什么?通过模型,通过验证,还是其他什么?我是Django/Python的新手.谢谢.

django many-to-many django-models

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

Hibernate多对多级联删除

我在我的数据库3个表:Students,CoursesStudents_Courses

学生可以有多门课程,课程可以有多个学生.之间存在许多一对多的关系StudentsCourses.

我有3个案例用于我的项目,课程已添加到我的Courses表格中.

  • (a)当我添加一个用户时,它被保存得很好,
  • (b)当我为学生添加课程时,它会创建新的行User_Courses- 再次,预期的行为.
  • (三)当我试图删除学生,则在删除适当的记录StudentsStudents_Courses,但它也删除Courses其中不需要的记录.即使我在课程中没有任何用户,我也希望课程能够在那里.

下面是我的表和注释类的代码.

    CREATE TABLE `Students` (
    `StudentID` INT(11) NOT NULL AUTO_INCREMENT,
    `StudentName` VARCHAR(50) NOT NULL 
    PRIMARY KEY (`StudentID`)
)

CREATE TABLE `Courses` (
    `CourseID` INT(11) NOT NULL AUTO_INCREMENT,
    `CourseName` VARCHAR(50) NOT NULL 
    PRIMARY KEY (`CourseID`)
)

CREATE TABLE `Student_Courses` (
    `StudentId` INT(10) NOT NULL DEFAULT '0',
    `CourseID` INT(10) NOT NULL DEFAULT '0',
    PRIMARY KEY (`StudentId`, …
Run Code Online (Sandbox Code Playgroud)

java sql annotations many-to-many hibernate

22
推荐指数
2
解决办法
4万
查看次数

跟踪实体框架中与行为的多对多关系中的更改

我目前正在尝试使用Entity Framework的ChangeTracker进行审计.我正在覆盖DbContext中的SaveChanges()方法,并为已添加,修改或删除的实体创建日志.这是FWIW的代码:

public override int SaveChanges()
{
    var validStates = new EntityState[] { EntityState.Added, EntityState.Modified, EntityState.Deleted };
    var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && validStates.Contains(x.State));
    var entriesToAudit = new Dictionary<object, EntityState>();
    foreach (var entity in entities)
    {
        entriesToAudit.Add(entity.Entity, entity.State);
    }
    //Save entries first so the IDs of new records will be populated
    var result = base.SaveChanges();
    createAuditLogs(entriesToAudit, entityRelationshipsToAudit, changeUserId);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这适用于"普通"实体.但是,对于简单的多对多关系,我必须扩展此实现以包含"独立关联",如此精彩的SO答案中所述,它通过ObjectContext访问更改,如下所示:

private static IEnumerable<EntityRelationship> GetRelationships(this DbContext context, EntityState relationshipState, Func<ObjectStateEntry, int, object> getValue)
{ …
Run Code Online (Sandbox Code Playgroud)

c# many-to-many entity-framework

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

Symfony2 Doctrine2多对多形式不保存实体

我与多对多的关系遇到了一些麻烦.我有UsersAssets.我希望能够将用户分配到资产页面上的资产.

下面的代码显示创建/编辑资产时的用户列表,但是对用户复选框所做的更改不会保存,而其余数据会保留.

如果我通过mysql客户端向users_assets添加条目,则这些更改将显示在资产列表中.

用户

class User extends BaseUser
{
    /**
     * @ORM\ManyToMany(targetEntity="Asset", inversedBy="users")
     */
    private $assets;
}
Run Code Online (Sandbox Code Playgroud)

财富

class Asset
{
    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="assets")
     */
    private $users;
}
Run Code Online (Sandbox Code Playgroud)

AssetType

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $form = $builder
        ->add('users', null, array(
            'expanded' => true,
            'multiple' => true
        ))
        ->getForm();

    return $form;
}
Run Code Online (Sandbox Code Playgroud)

forms many-to-many symfony doctrine-orm

21
推荐指数
3
解决办法
2万
查看次数

学说2:如何处理具有额外列的连接表

如何在Doctrine 2中设置具有额外列的连接表,或与其他属性的多对多关联?

many-to-many properties jointable doctrine-orm

21
推荐指数
1
解决办法
2万
查看次数

删除多个到多个实体框架

Artist和之间存在着多对多的关系ArtistType.我可以轻松添加ArtistType如下的艺术家

foreach (var artistType in this._db.ArtistTypes
    .Where(artistType => vm.SelectedIds.Contains(artistType.ArtistTypeID)))
{
    artist.ArtistTypes.Add(artistType);
}

_db.ArtistDetails.Add(artist);
_db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这将使用正确的映射更新多对多关联表.但是,当我尝试从表中删除任何项目时,我没有得到任何错误,但它没有从表中删除它?

foreach (var artistType in this._db.ArtistTypes
    .Where(at => vm.SelectedIds.Contains(at.ArtistTypeID)))
{
    artistDetail.ArtistTypes.Remove(artistType);
}

this._db.Entry(artistDetail).State = EntityState.Modified;
this._db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

c# many-to-many entity-framework dbcontext

21
推荐指数
1
解决办法
2万
查看次数