我有这3个权利
Users.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Users
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="AppBundle\Repository\UsersRepository")
*/
class Users
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255, unique=true)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=20)
*/
private $password;
/**
* @var string
*
* @ORM\Column(name="phone", type="string", length=20)
*/
private $phone;
/**
* @var string
*
* @ORM\Column(name="type", type="string")
*/
private $type;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var int
*
* @ORM\Column(name="feedback", type="integer")
*/
private $feedback;
/**
* @var string
*
* @ORM\Column(name="picture", type="blob")
*/
private $picture;
/**
* @var int
*
* @ORM\Column(name="rating", type="integer", length=255)
*/
private $rating;
/**
* @var string
*
* @ORM\Column(name="info", type="text")
*/
private $info;
/**
* @var \DateTime
*
* @ORM\Column(name="datecreated", type="datetime")
*/
private $datecreated;
/**
* @ORM\Column(name="is_active", type="boolean")
*/
private $isActive;
}
client.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* client
*
* @ORM\Table(name="client")
* @ORM\Entity(repositoryClass="AppBundle\Repository\clientRepository")
*/
class client extends Users
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="numberofjobsposted", type="integer")
*/
private $numberofjobsposted;
/**
* @var string
*
* @ORM\Column(name="clienttype", type="string", length=255)
*/
private $clienttype;
}
sprovider.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* sprovider
*
* @ORM\Table(name="sprovider")
* @ORM\Entity(repositoryClass="AppBundle\Repository\sproviderRepository")
*/
class sprovider extends Users
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var array
*
* @ORM\Column(name="interestedin", type="simple_array")
*/
private $interestedin;
/**
* @var int
*
* @ORM\Column(name="numofsuccjobs", type="integer")
*/
private $numofsuccjobs;
/**
* @var string
*
* @ORM\Column(name="sprovidertype", type="string", length=255)
*/
private $sprovidertype;
/**
* @var string
*
* @ORM\Column(name="address", type="string", length=255)
*/
private $address;
/**
* @var string
*
* @ORM\Column(name="postcode", type="string", length=255)
*/
private $postcode;
}
所以我实现了extends
语句在MySQL中的Users
和client
表中提供了sprovider
属性。棒极了。我现在想要的是建立关系,以便当我添加新的client
时,表Users
和client
在MySQL中添加一个新的用户/客户端,他们有同样id
。
type()
实体中的Users
属性我希望对于我创建的用户类型是可选的。示例:我创建了一个新的client
,在MySQL的Users
表中,类型设置为“CLIENT”。
我读过this,到目前为止,我认为它必须是ManyToMany关系,但这对我来说很困惑。
如何在实体中建立这些关系,然后如何在控制器中使用它们?如果可能的话,请提供一个例子。
答案 0 :(得分:0)
我认为你对使用继承的原因感到困惑。
这个想法是你有基类,在这种情况下是User,并且可以扩展以提供该类的变体,在这种情况下client
(你应该大写这个)和sprovider
。
理想情况下,您不会有User
表,只有其他2表。
在学说中,这称为映射超类。
映射的超类是一个抽象或具体的类,它为其子类提供持久的实体状态和映射信息,但它本身不是一个实体。通常,这种映射超类的目的是定义多个实体类共有的状态和映射信息。
您可以使用关系链接属性,这是他们的示例。
<?php
/** @MappedSuperclass */
class MappedSuperclassBase
{
/** @Column(type="integer") */
protected $mapped1;
/** @Column(type="string") */
protected $mapped2;
/**
* @OneToOne(targetEntity="MappedSuperclassRelated1")
* @JoinColumn(name="related1_id", referencedColumnName="id")
*/
protected $mappedRelated1;
// ... more fields and methods
}
/** @Entity */
class EntitySubClass extends MappedSuperclassBase
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="string") */
private $name;
// ... more fields and methods
}