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

Symfony 2实体联接或条令查询联接

李睿
2023-03-14

我想知道是否可以将一个实体配置为自动从另一个实体加载数据。前任。

/**
 * accountsUsers
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class accountsUsers
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    public $id;
    /**
     * @var string
     *
     * @ORM\Column(name="userid",type="integer")
     */
    public $userid;
    /**
     * @var string
     *
     * @ORM\Column(name="roleid",type="integer")
     */
    public $roleid;
    /**
     * @var string
     * admin,adviser,etc
     * @ORM\Column(name="roleType", type="string", length=255)
     */ 
    public $roleType;
    /**
     * @var string
     *
     * @ORM\Column(name="firstname", type="string", length=255)
     */
    public $firstname;
    /**
     * @var string
     *
     * @ORM\Column(name="lastname", type="string", length=255)
     */
    public $lastname;
    /**
     * @var string
     *
     * @ORM\Column(name="company", type="string", length=255)
     */
    public $company;
    /**
     * @var string
     *
     * @ORM\Column(name="url", type="string", length=255)
     */
    public $url;
    /**
     * @var string
     *
     * @ORM\Column(name="phone", type="string", length=255)
     */
    public $phone;
    /**
     * @var string
     *
     * @ORM\Column(name="phone2", type="string", length=255)
     */
    public $phone2;
    /**
     * @var string
     *
     * @ORM\Column(name="address", type="string", length=255)
     */
    public $address;
    /**
     * @var string
     *
     * @ORM\Column(name="address2", type="string", length=255)
     */
    public $address2;
    /**
     * @var string
     *
     * @ORM\Column(name="city", type="string", length=255)
     */
    public $city;
    /**
     * @var string
     *
     * @ORM\Column(name="state", type="string", length=255)
     */
    public $state;
    /**
     * @var string
     *
     * @ORM\Column(name="zip", type="string", length=255)
     */
    public $zip;
    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255)
     */
    public $email;
    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=255)
     */
    public $password;
}

/**
 * accounts
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class accounts
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    public $id;
    /**
     * @var string
     *
     * @ORM\Column(name="partnerid", type="string", length=100)
     */
    public $partnerid;
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="subscribedate", type="date")
     */
    public $subscribedate;
    /**
     * @var string
     *
     * @ORM\Column(name="connectionType", type="string", length=100)
     */
    public $connectionType;
    /**
     * @var string
     *
     * @ORM\Column(name="recordkeeperTpaid", type="string", length=100)
     */
    public $recordkeeperTpaid;
    /**
     * @var string
     *
     * @ORM\Column(name="recordkeeperAdviceProviderCd", type="string", length=100)
     */
    public $recordkeeperAdviceProviderCd;
    /**
     * @var string
     *
     * @ORM\Column(name="recordkeeperUrl", type="string", length=200)
     */
    public $recordkeeperUrl;
    /**
     * @var string
     *
     * @ORM\Column(name="recordkeeperUser", type="string", length=100)
     */
    public $recordkeeperUser;
    /**
     * @var string
     *
     * @ORM\Column(name="recordkeeperPass", type="string", length=100)
     */
    public $recordkeeperPass;
    /**
     * @var string
     *
     * @ORM\Column(name="recordkeeperPortfoliosAvailable", type="smallint")
     */
    public $recordkeeperPortfoliosAvailable;
    /**
     * @var string
     *
     * @ORM\Column(name="recordkeeperRiskBasedFundsAvailable", type="smallint")
     */
    public $recordkeeperRiskBasedFundsAvailable;
    /**
     * @var string
     *
     * @ORM\Column(name="investmentsMinScore", type="integer")
     */
    public $investmentsMinScore;
    /**
     * @var string
     *
     * @ORM\Column(name="investmentsMaxScore", type="integer")
     */
    public $investmentsMaxScore;
    /**
     * @var string
     *
     * @ORM\Column(name="ACAon", type="smallint")
     */
    public $ACAon;
    /**
     * @var string
     *
     * @ORM\Column(name="MSTClientID", type="string", length = 100)
     */
    public $MSTClientID;
}

当findby、findbyone等访问accountsUsers时,是否可以设置accountsUsers以自动加载所有帐户数据。关系为accountsUsers.userid=accounts.id。

如果没有,我将如何在使用原则的连接中做到这一点。我知道如何使用纯原始sql。

选择*从帐户a左加入帐户用户ba.id=b.userid

共有2个答案

越风史
2023-03-14

Symfony开发的关系使您能够在实体文件中定义属性并将其与其他实体关联。有两种方法。

第一种方式:

在你的情况下,首先你必须在用户表中创建一个列(例如将其命名为帐户),并使用外键将其关联到account.id列,然后在应用\实体\帐户中可以定义属性名称$user并将其关联到App\Entity\用户,如下面的代码:

   /**
     * @ORM\OneToMany(targetEntity="App\Entity\Users", mappedBy="account")
     */
    private $users;

App\Entity\Users

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Accounts", inversedBy="users")
     */
    private $Account;

这样,每当您从App\Entity\Accounts获取对象时,名为users的键将返回包含所有此帐户用户信息的对象,结果如下:

    SELECT * FROM accounts a LEFT JOIN accountsUsers b ON a.id = b.userid

会给你。

第二种方法非常简单,只需使用make:entity命令即可

php bin/console make:entity

你可以做一个新的列,并为它建立一个关系,命令会一步一步地问你所有的事情,它非常简单,你不需要阅读文档,但是如果你需要更多的信息,这是阅读的链接关于它https://symfony.com/doc/current/doctrine/associations.html#the-manytoone-onetomany-association

薛浩言
2023-03-14

不可能仅通过使用注释在一个查询中加载单独的实体(即使用JOIN)。您必须在存储库中定义一个自定义查询,该查询指示Doctrine通过DQL或QueryBuilder与相关实体连接。

这对我来说也是一个大难题,但是在定义关联的注释中使用fetch=“EAGER”实际上并没有使用JOIN来检索结果-它只发出两个单独的查询来预填充关系,这样它的第一次访问就不会触发延迟加载过程。

有关更多信息,请参见此问题。

 类似资料:
  • 问题内容: 对于开发人员何时使用联接而不是子查询是否有经验法则还是相同的? 问题答案: 取决于RDBMS。您应该比较两个查询的执行计划。 根据我对Oracle 10和11的经验,执行计划始终是相同的。

  • 有没有办法在没有显式连接的实体上编写条件查询?通过显式连接,我的意思是数据库中的两个表没有外键关系,但一些列需要从两个表中提取,因此在查询中需要连接。我知道具有join的查询可以用‘In’子句编写,而条件查询可以用‘In’条件编写。我已经写了这种情况下的HQL,但请告诉我如何编写这种情况下的标准查询。 先谢谢了

  • 我有一个名为内容的实体。这是我所有其他内容相关实体的抽象基类。 内容属性: id 更新 ...... 此外,我有许多不同的实体,它们都扩展了内容。 在我的存储库(另一个非内容且不扩展内容的实体)中,我有一个相当复杂的查询,我想在其中选择所有内容对象的“更新”字段(取决于其他一些不相关的内容) 编辑:但内容实体已通过“”连接到另一个实体上- 问题是,在这种情况下,查询原则将每个将内容扩展到内容表的实

  • subcompany.hbm.xml 子单位表 branch.java 指定表 我需要帮助编写条件查询使用提供的SQL。

  • 是否有一种方法可以只得到那些数据我不需要所有的数据从所有其他的表组合键??多谢帮忙!

  • 问题内容: 我对子查询的性能/连接另一个表有一些疑问 这是我的SQL,现在这个东西可以运行大约一百万次或更多。我的问题是什么会更快? 如果我更改为() 或者 如果我将’HelpTable’添加到中并在中进行联接? edit1 好吧,此脚本仅运行与r个人一样多的人。 我的程序有2个模块,一个模块填充,另一个模块传输数据。该程序确实将2个数据库合并在一起,因此有时会使用相同的Key。 现在,我正在研究