我有一个实体用户
class Users
{
//...
/**
* @ORM\Column(name="firstName", type="string", length=50, nullable=true)
*/
private $firstname;
public function getFirstname()
{
return $this->firstname;
}
/*
*@ORM\OneToMany(targetEntity='Worksamples', mappedBy='user')
*/
private $worksample;
public function __constraction()
{
$this->worksample = new ArrayCollection();
}
public function getWorksample()
{
$this->worksample;
}
}
另一个名为Worksamples的实体
class Worksamples
{
//...
/**
* @ORM\Column(name="sampleSource", type="string", length=255, nullable=false)
*/
private $samplesource;
public function getSamplesource()
{
return $this->samplesource;
}
/**
* @ORM\Column(name="UserId", type="integer", nullable=false)
*/
private $userid;
public function getUserid()
{
return $this->userid;
}
/*
*@ORM\ManyToOne(targetEntity="Users", inversedBy="worksample")
*@ORM\JoinColumn(name="UserId", referencedColumnName="id")
*/
private $user;
public function getUser()
{
return $this->user;
}
}
在我的控制器中我有这个动作
public function indexAction($id)
{
$user = $this->getDoctrine()
->getRepository('AcmeWellcomeBundle:Users')
->find($id);
$sample = $user->getWorksample()->getSamplesource();
return $this->render('AcmeWellcomeBundle:Default:index.html.twig', array('sample' => $sample));
}
我有这个错误
FatalErrorException:错误:在....中的非对象上调用成员函数getSamplesource()
它假设用户有许多Worksamples,而Worksample只有一个用户。
任何帮助?
答案 0 :(得分:2)
在使用代码之前
您是否通过应用的控制台运行课程?如果没有在您的终端或控制台上通过服务器上的SSH执行此操作:
php app/console doctrine:generate:entities [YourVendorName]
然后使用以下方式更新您的数据库:
php app/console doctrine:schema:update --force
明确缓存:
app/console cache:clear
这些步骤将确保实际使用所有注释并正确设置数据库。
然后:您private $userid;
中不需要Worksamples
而$this->worksample = new ArrayCollection();
中不需要Users
。 Doctrine将为您处理所有这些。此外,最好将$worksample
重命名为$worksamples
,因为它始终会返回arrayCollection
而不会返回单个对象。
如果设置正确,只需使用$workspace->getUser()
,它将返回附加到此特定对象的类User
的对象。
在您的控制器中
首先获取工作样本列表。然后检查是否有任何工作样本附加到对象。然后例如从列表中的第一个对象获取vlue:
$samples = $user->getWorksamples();
if ($samples) {
$sample = $samples[0]->getSamplesource();
}
有些说明:
__construct()
而不是__constraction()
。User
和Wokrspace
。