我有2个表,一个是GrowerProjection,另一个是Crop。一种作物可以有许多与之相关的种植者预测。我使用已构建的基础数据库进入此项目,并且在数据库中,Crop具有唯一的ID,例如CROP-001,存储在名为crop_ID的列中。在GrowerProjection表中还有一个crop_ID字段,可以让您查看特定投影正在讨论的裁剪。
所以现在我使用Doctrine来生成实体,现在我正在尝试将这些实体绑定在一起。当我尝试创建一个ManyToOne关联时,我总是得到一个null值。我的问题是:1。我做错了什么2.以后如何调试这些问题?
我已经尝试通过控制台验证架构并更新架构,但这似乎没有效果。
以下是Growerprojection实体的相关剪辑:
/**
* Growerprojection
*
* @ORM\Table(name="growerProjection")
* @ORM\Entity
*/
class Growerprojection
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Crop")
* @ORM\JoinColumn(name="cropId", referencedColumnName="cropId")
*/
private $crop;
/**
* @var string
*
* @ORM\Column(name="grower_ID", type="string", length=16, nullable=false)
*/
private $growerId;
/**
* @var string
*
* @ORM\Column(name="crop_ID", type="string", length=16, nullable=false)
*/
private $cropId;
public function getReadyToLoadDt() {
return $this->prjreadytoloaddt;
}
public function setReadyToLoadDt($theDate) {
$this->prjreadytoloaddt=$theDate;
}
public function getCrop() {
return $this->crop;
}
}
我尝试使用join列作为crop_ID和cropId,因为doctrine使用cropId但实际的表使用crop_ID。我曾尝试使用和不使用@ID指令。没变。裁剪始终为空。
这是Crop实体部分:
/**
* Crop
*
* @ORM\Table(name="crop")
* @ORM\Entity
*/
class Crop
{
/**
* @var string
*
* @ORM\Column(name="commodity_ID", type="string", length=16, nullable=false)
*/
private $commodityId;
/**
* @var string
*
* @ORM\Column(name="crop_ID", type="string", length=16)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $cropId;
public function getCommodityID() {
return $this->commodityId;
}
}
然后,这是控制器的动作:
public function testAction(Request $request)
{
$repository = $this->getDoctrine()->getRepository('AppBundle:Growerprojection');
$projections = $repository->findBy(
array('growerId' => 'GROW-001'),
array('prjreadytoloaddt' => 'ASC')
);
$myCrop = $projections[0]->getCrop();
\Doctrine\Common\Util\Debug::dump($myCrop);
return $this->render('grower/growerTest.html.twig',
array('projections' => $projections));
}
这会找到一个种植者投影,种植者投影将CROP-001作为cropId,并且裁剪表中有一个crop_ID为CROP-001的裁剪。
行\ Doctrine \ Common \ Util \ Debug :: dump($ myCrop);将始终产生NULL,当我在树枝内部执行dump()时,我也看到投影到达并填充,但列裁剪为空。
我在这里做错了什么,以及如何让这种关联发挥作用,以及如何在将来对此进行调试,以便我不必纠缠所有关于它的事情?
答案 0 :(得分:0)
对于类的映射,name
的{{1}}和referencedColumnName
字段的值必须是sql表的实际列名,而不是字段名。请参阅Doctrine docs以供参考。
您的代码应如下所示
@ORM\JoinColumn
然而,我还没有找到一种调试这类错误的简单方法。对我来说最好的是,在建立协会时要非常小心。
答案 1 :(得分:0)
以下是发生的事情:
数据表没有内置的外键约束。我无法让它们工作,所以我开始了一个不同的项目,复制了几个Doctrine文件,并使用了Scorpion的建议表格#39的建议。然后我让Doctrine创建了模式,然后协会工作了。这里的计划是备份数据库中当前的数据,编辑所有的doctrine文件以建立关联,然后让doctrine正确地重新创建数据库并使用外键。