标签: many-to-many

使用具有多对多关系的EntityRepository :: findBy()将导致Doctrine中的E_NOTICE

对于Symfony2项目,我必须在博客文章和所谓的平台之间建立关系.平台根据您用于查看站点的域定义特定过滤器.例如:如果您通过url first-example.com加入该网站,该网站将仅提供与此特定平台相关联的博客帖子.

为此,我创建了两个实体Post和Platform.之后我将它们与多对多关系映射在一起.我正试图通过findBy()Doctrines中内置函数的多对多关系来检索数据EntityRepository.

// every one of these methods will throw the same error
$posts = $postRepo->findBy(array('platforms' => array($platform)));
$posts = $postRepo->findByPlatforms($platform);
$posts = $postRepo->findByPlatforms(array($platform));
Run Code Online (Sandbox Code Playgroud)

实体和现有对象$postRepo的正确存储库在哪里. 无论哪种方式:我最终得到以下错误:Post$platformPlatform

ErrorException: Notice: Undefined index: joinColumns in [...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1495

[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1495
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1452
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1525
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1018
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:842
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php:157
[...]/src/Foobar/BlogBundle/Tests/ORM/PostTest.php:102
Run Code Online (Sandbox Code Playgroud)

是否有可能以这种方式以多对多关系检索相关的entites,或者我被迫自己编写这些函数?奇怪的是:Doctrine不会抛出任何错误:"这不可能.",但是内部E_NOTICE.这就是为什么我认为它应该是可能的,但我在这里错过了一些观点.

剥离到有趣的部分,这两个实体看起来像这样.

<?php

namespace Foobar\CommunityBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

// [...] other namespace stuff

/**
 * @ORM\Entity(repositoryClass="Foobar\CommunityBundle\Entity\Repository\PlatformRepository")
 * @ORM\Table(name="platforms")
 */
class Platform
{
    /** …
Run Code Online (Sandbox Code Playgroud)

php doctrine many-to-many database-relations symfony

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

如何通过Fluent API实体框架定义多对多关系?

以下是我的模型:

public class TMUrl
{
    //many other properties

    //only property with type Keyword
    public List<Keyword> Keywords{get;set;} 
}

public class Keyword
{
   //many other properties

   //only property with type TMUrl
   public List<TMUrl> Urls{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

很明显,两个实体都有多对多的关系.我选择了流畅的api告诉实体框架关于这种关系,即

modelBuilder.Entity<TMUrl>
               .HasMany(s => s.Keywords)
               .WithMany(s => s.URLs).Map(s =>
                {
                    s.MapLeftKey("KeywordId");
                    s.MapRightKey("UrlId");
                    s.ToTable("KeywordUrlMapping");
                });
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

url.Keywords.Add(dbKey); //where url is object of TMUrl, 
                         //dbKey is an existing/new object of Keyword
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我得到例外

An error occurred while saving entities that do not expose foreign key 
properties for their relationships.... …
Run Code Online (Sandbox Code Playgroud)

c# many-to-many entity-framework ef-fluent-api

32
推荐指数
1
解决办法
3万
查看次数

如何在MySQL中为多对多连接正确索引链接表?

假设我在表"table1"和"table2"之间有一个简单的多对多表,它包含两个int字段:"table1-id"和"table2-id".我应该如何索引此链接表?

我曾经只创建一个复合主索引(table1-id,table2-id),但我读到如果更改查询中字段的顺序,则此索引可能不起作用.那么什么是最佳解决方案 - 为没有主索引的每个字段制作独立索引?

谢谢.

mysql indexing many-to-many

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

如何查询多对多?

我在观看ruby on rails教程时发现了以下表格结构.

table actors
id  int  11  primary key auto_increment
name  varchar  30

table movies
id  int  11  primary key auto_increment
name  varchar  30

table actors_movies
actor_id  int  11
movie_id  int  11
Run Code Online (Sandbox Code Playgroud)

如何查询选择演员参与的电影?

我不是要求rails上的ruby代码.我想要实际的mysql查询字符串.

谢谢!

mysql many-to-many

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

实体框架4.1+多对多关系改变了跟踪

如何检测ICollection <>属性(多对多关系)的更改?

public class Company
{
    ...

    public virtual ICollection<Employee> Employees { get; set; }
}

using (DataContext context = new DataContext(Properties.Settings.Default.ConnectionString))
{
    Company company = context.Companies.First();
    company.Employees.Add(context.Employees.First());

    context.SaveChanges();
}

public class DataContext : DbContext
{
    public override int SaveChanges()
    {
        return base.SaveChanges();

        // Company's entity state is "Unchanged" in this.ChangeTracker
    }
}
Run Code Online (Sandbox Code Playgroud)

many-to-many entity-framework change-tracking

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

MS SQL与联结表创建多对多关系

我正在使用Microsoft SQL Server Management Studio,在创建联结表时,我应该为联结表创建一个ID列,如果是这样,我还应该将它作为主键和标识列吗?或者只是为我加入多对多关系的表保留2列?

例如,如果这将是多对多表:

MOVIE
Movie_ID
Name
etc...

CATEGORY
Category_ID
Name
etc...
Run Code Online (Sandbox Code Playgroud)

我应该建立联结表:

MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID
Movie_Category_Junction_ID
Run Code Online (Sandbox Code Playgroud)

[并制作Movie_Category_Junction_ID我的主键并将其用作标识栏]?

要么:

MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID
Run Code Online (Sandbox Code Playgroud)

[并且只留下没有主键或身份表的那个]?

sql sql-server many-to-many junction-table

29
推荐指数
2
解决办法
6万
查看次数

如何在代码中建模多对多关系?

假设我在数据库中有2个表.例如:Dog&Boss这是一个多对多的关系,因为老板可以拥有超过1只狗,而一只狗可以有超过1只拥有者.我是Bobby的老板,但我的妻子也是.

但是很多人不被允许,所以有一个很好的帮助:DogsPerBoss

如何在代码中对此进行建模?

班老板可以拥有一系列狗.Class Dog可以拥有一系列老板. - >至少,这就是我的想法.也许有更好的解决方案?

辅助表中的额外数据怎么样?应该是de Boss级还是Dog级?例如:昵称(我叫狗"好孩子",我的妻子叫他"小狗")

我希望我的问题有点清楚吗?有什么最好的方法来实现这个目标是什么?你能给我一些参考吗?

ORM(如NHibernate)不是一个选项.

c# modeling many-to-many

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

多对多表应该有主键吗?

如果我有两个具有多对多关系的对象,我通常会在我的数据库模式中使用多对多表对它们进行建模,以将两者关联起来.但是,多对多表(或"连接表")是否有自己的主键(整数自动递增)?

例如,我可能有表A和B,每个表都有一个ID,还有一个名为A_B的表,其外键元组为(A_ID,B_ID).但是A_B是否应该拥有自己的主键自动递增ID列?

添加它有什么优缺点?我个人喜欢用于多对多连接的自然键.但主要关键是增加了什么?

database many-to-many database-agnostic

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

SQL多对多选择

category_product
---------------
id_category
id_product

product
---------------
id_product
id_manufacturer

manufacturer
---------------
id_manufacturer
name
Run Code Online (Sandbox Code Playgroud)

我如何创建一个SQL查询,以便在id_category等于某事时从制造商中选择所有名称?

mysql sql many-to-many

27
推荐指数
2
解决办法
5万
查看次数

如何直接查询Django为ManyToMany关系创建的表?

我有一个模型,MyModel2ManyToManyField相关的另一种模式MyModel1.

我如何获得对mymodel1.id, mymodel2.id,如Django为这种关系创建的表中所示?我是否必须在此表上执行原始SQL查询,或者是否可以通过此模型的对象管理器进行查询?

class MyModel1(models.Model):
    name = models.CharField(max_length=50)


class MyModel2(models.Model):
    name = models.CharField(max_length=50)
    mymodel1 = models.ManyToManyField(MyModel1)
Run Code Online (Sandbox Code Playgroud)

python django many-to-many

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