Php Symfony学说
如果我有关系OneToOne->MANYTONE,如何在DB中连接表Php Symfony学说,php,mysql,symfony,orm,doctrine-orm,Php,Mysql,Symfony,Orm,Doctrine Orm,如果我有关系OneToOne->MANYTONE,如何在DB中连接表 我有数据库MySQL,在表用户中我需要查看行客户机id。但现在我在表客户机中有行用户id,仅此而已。但需要表用户中的clien_id。我在doctrinebundle的github中发布了这个问题,因为这是注释@ORM\JoinColumn 在实体中,当我在DB entity_id中提交了许多实体时,但我也在一个域中需要实体_id,我会尝试 * @ORM\JoinColumn(name="developer_id",
我有数据库MySQL,在表用户中我需要查看行客户机id。但现在我在表客户机中有行用户id,仅此而已。但需要表用户中的clien_id。我在doctrinebundle的github中发布了这个问题,因为这是注释@ORM\JoinColumn 在实体中,当我在DB entity_id中提交了许多实体时,但我也在一个域中需要实体_id,我会尝试
* @ORM\JoinColumn(name="developer_id", nullable = true, referencedColumnName="id")
但在DB中看不到此列
这是我在数据库中的实体客户端,我有用户\u id
/**
* Clients.
*
* @ORM\Table(name="clients")
* @Gedmo\SoftDeleteable(fieldName="deletedAt")
* @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\Repository\ClientsRepository")
* @ExclusionPolicy("all")
*/
class Clients
{
use Timestampable;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Artel\ProfileBundle\Entity\Users", inversedBy="client", cascade={"persist", "remove"}, fetch="EAGER")
*/
protected $user;
这是我的实体用户(不是列客户端id):
我想你对你的关系有点困惑。。。
试试这个: 客户:
class Clients
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}
用户:
class Users
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Clients")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
*/
public $client;
}
现在,如果要在数据库中运行:php bin/console原则:schema:update--force
,将创建以下表:
CREATE TABLE `clients` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`client_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_1483A5E919EB6921` (`client_id`),
CONSTRAINT `FK_1483A5E919EB6921` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`)
) ENGINE=InnoDB;
假设这正是你所期望的。。。
当然所有这些都是真的,如果我正确理解了你的问题。。。
(顺便说一句,最好将您的实体重命名为User and Client。)我不理解您的问题。您要添加哪个关联?实际问题是什么?我有数据库MySQL,在表用户中我需要看到行客户机id。但现在我在表客户机中有行用户id,仅此而已。但需要表用户中的clien_id。我在github的doctrinebundle中发布了这个问题,因为这是注释@ORM\joinColumn,我仍然不完全理解您试图实现的目标。现在你有客户端和用户,每个客户端可以有一个用户,对吗?但你想反过来(即一个用户只能与一个客户机关联,但一个客户机可以与多个用户关联)?你的问题并不清楚。请澄清您希望收到什么?例如:
php bin/console原则:schema:update
将为您生成所需的表,或者当您创建新的用户实例时,实体用户
将加入到客户机
,否则…许多人都会自动创建列,这是可以的。但在表user中是否有一个可能列,其中关系为OneToMany。我添加了注释,但在DB中看不到用户表中的行。在表client all well.MANYTONE中自动创建列,这样就可以了。但在表user中是否有一个可能列,其中关系为OneToMany。我添加了注释,但在DB中看不到用户表中的行。在表中客户端都很好。不,这是不可能的。因为在任何情况下,你不需要用户
中的列客户id
,你需要客户
中的列用户id
,条令会为你创建它。为什么不好?也许你需要重新设计你的数据库模式。。。因为这是一种常见的做法…schema ok,但为了方便客户,希望看到客户,我认为您尝试构建一些wronf。。。例如:我们有tablecategory
,这应该不知道任何其他表。太棒了!)我们有表product
,它知道category
,因为许多产品可以有相同的类别,这就是为什么表product包含字段category\u id
,因为产品知道category。。。要从产品接收类别,您可以编写如下代码:$product->getCategory()->getId()代码>。每个人都以这样的方式构建模式,而且它是有效的!)
CREATE TABLE `clients` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`client_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_1483A5E919EB6921` (`client_id`),
CONSTRAINT `FK_1483A5E919EB6921` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`)
) ENGINE=InnoDB;