【问题标题】:Updating a field in a table from a join OneToOne Symfony2 / Doctrine 2从连接 OneToOne Symfony2 / Doctrine 2 更新表中的字段
【发布时间】:2014-01-05 02:44:22
【问题描述】:

我对 Symfony2 中的 Doctrine2 和两个相关实体有疑问。

我有一个类用户

class Users
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="username", type="string", length=50)
 */
private $username;

/**
 * @var string
 *
 * @ORM\Column(name="password", type="string", length=50)
 */
private $password;

/**
 * @var boolean
 *
 * @ORM\Column(name="type", type="boolean")
 */
private $type;

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255)
 */
private $email;

/**
 * @var string
 *
 * @ORM\Column(name="first_name", type="string", length=100)
 */
private $firstName;

/**
 * @var string
 *
 * @ORM\Column(name="last_name", type="string", length=100)
 */
private $lastName;

/**
 * @var string
 *
 * @ORM\Column(name="tel", type="string", length=255)
 */
private $tel;

/**
 * @var string
 *
 * @ORM\Column(name="url_img", type="string", length=255)
 */
private $urlImg;

/**
 * @var string
 *
 * @ORM\Column(name="company", type="string", length=255)
 */
private $company;

/**
 * @ORM\OneToOne(targetEntity="Providers", mappedBy="userId", cascade={"persist"})
 */
protected $provider;


/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set username
 *
 * @param string $username
 * @return Users
 */
public function setUsername($username)
{
    $this->username = $username;

    return $this;
}

/**
 * Get username
 *
 * @return string 
 */
public function getUsername()
{
    return $this->username;
}

/**
 * Set password
 *
 * @param string $password
 * @return Users
 */
public function setPassword($password)
{
    $this->password = $password;

    return $this;
}

/**
 * Get password
 *
 * @return string 
 */
public function getPassword()
{
    return $this->password;
}

/**
 * Set type
 *
 * @param boolean $type
 * @return Users
 */
public function setType($type)
{
    $this->type = $type;

    return $this;
}

/**
 * Get type
 *
 * @return boolean 
 */
public function getType()
{
    return $this->type;
}

/**
 * Set idPrest
 *
 * @param integer $idPrest
 * @return Users
 */
public function setIdPrest($idPrest)
{
    $this->idPrest = $idPrest;

    return $this;
}

/**
 * Get idPrest
 *
 * @return integer 
 */
public function getIdPrest()
{
    return $this->idPrest;
}

/**
 * Set idEmbaucher
 *
 * @param integer $idEmbaucher
 * @return Users
 */
public function setIdEmbaucher($idEmbaucher)
{
    $this->idEmbaucher = $idEmbaucher;

    return $this;
}

/**
 * Get idEmbaucher
 *
 * @return integer 
 */
public function getIdEmbaucher()
{
    return $this->idEmbaucher;
}

/**
 * Set email
 *
 * @param string $email
 * @return Users
 */
public function setEmail($email)
{
    $this->email = $email;

    return $this;
}

/**
 * Get email
 *
 * @return string 
 */
public function getEmail()
{
    return $this->email;
}

/**
 * Set firstName
 *
 * @param string $firstName
 * @return Users
 */
public function setFirstName($firstName)
{
    $this->firstName = $firstName;

    return $this;
}

/**
 * Get firstName
 *
 * @return string 
 */
public function getFirstName()
{
    return $this->firstName;
}

/**
 * Set lastName
 *
 * @param string $lastName
 * @return Users
 */
public function setLastName($lastName)
{
    $this->lastName = $lastName;

    return $this;
}

/**
 * Get lastName
 *
 * @return string 
 */
public function getLastName()
{
    return $this->lastName;
}

/**
 * Set tel
 *
 * @param string $tel
 * @return Users
 */
public function setTel($tel)
{
    $this->tel = $tel;

    return $this;
}

/**
 * Get tel
 *
 * @return string 
 */
public function getTel()
{
    return $this->tel;
}

/**
 * Set urlImg
 *
 * @param string $urlImg
 * @return Users
 */
public function setUrlImg($urlImg)
{
    $this->urlImg = $urlImg;

    return $this;
}

/**
 * Get urlImg
 *
 * @return string 
 */
public function getUrlImg()
{
    return $this->urlImg;
}

/**
 * Set company
 *
 * @param string $company
 * @return Users
 */
public function setCompany($company)
{
    $this->company = $company;

    return $this;
}

/**
 * Get company
 *
 * @return string 
 */
public function getCompany()
{
    return $this->company;
}

/**
 * Set provider
 *
 * @param Providers $provider
 * @return Users
 */
public function setProvider($provider = null)
{
    $this->provider = $provider;

    return $this;
}

/**
 * Get provider
 *
 * @return Providers 
 */
public function getProvider()
{
    return $this->provider;
}



}

与 OneToOne 上的类提供者有关(继承)

class Providers
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;


/**
 * @ORM\OneToOne(targetEntity="Users", inversedBy="provider")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
protected $userId;

/**
 * @ORM\OneToOne(targetEntity="Advertisement", mappedBy="provider")
 */
protected $advertisement;

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/** * 设置用户ID * * @param \leBonCoinDesServices\MainBundle\Entity\Users $userId * @return 提供者 */ 公共函数 setUserId($userId = null) { $this->userId = $userId;

    return $this;
}

/**
 * Get userId
 *
 * @return \leBonCoinDesServices\MainBundle\Entity\Users 
 */
public function getUserId()
{
    return $this->userId;
}

}

我只想获取从关系中创建的字段 user_id,以便能够在创建用户时获取此用户的 id 并将其提供给 user_id 字段。

当我测试我的控制器以创建用户和提供者时:

public function newUserAction()
{

    $user = new Users();
    $user->setUsername("gokusan");
    $user->setPassword("test");
    $user->setType("p");
    $user->setEmail("test@msn.com");
    $user->setFirstName("KHALIL");
    $user->setLastName("Ahmed");
    $user->setTel("0142021148");
    $user->setUrlImg("img/test/");
    $user->setCompany("Push&Pull");

    $this->getDoctrine()->getEntityManager()->persist($user);
    $this->getDoctrine()->getEntityManager()->flush();

    $provider = new Providers();
    $id = $user->getId();

    $provider->setUserId($id);

    $this->getDoctrine()->getEntityManager()->persist($provider);
    $this->getDoctrine()->getEntityManager()->flush();

    die("User Added");
}

这让我犯了错误:

警告:spl_object_hash() 期望参数 1 为对象,整数在 F:\Programs Files\Program Files\wamp\www\leboncoindesservices\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php 第 1367 行中给出

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    您的Providers::setUserId($userId) 期望$userId\leBonCoinDesServices\MainBundle\Entity\Users 类型而不是integer 类型。所以你应该能够将你的 Users 对象传递给 $provider 喜欢

    $user = new Users();
    ...
    
    $provder = new Providers();
    ...
    $provider->setUserId($user);
    

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 1970-01-01
      • 2023-03-25
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 2011-06-22
      相关资源
      最近更新 更多