我在Laravel项目中使用Doctrine ORM。我有三张桌子:
每个设备都有一个设备组,每个设备组都有一个smi。 我要使用Doctrine做的是查询所有群组并获取他们的设备和他们的smi。
这是我在PHP中的查询(来自存储库):
$results = $this->_em->createQueryBuilder()
->select('dg')
->from($this->_entityName, 'dg')
->innerJoin('dg.smi_enterprise_code', 'sec')
->getQuery()
->getResult();
这是表格结构:
表device_group:
每个设备组都有一个smi_enterprise_code(通过smi_enterprise_code_id)
表smi_enterprise_code:
餐桌设备:
这些表格是使用工匠通过这些类创建的:
SmiEnterpriseCode.php
<?php
namespace App\Entities;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="App\Repositories\SmiEnterpriseCode")
* @ORM\Table(name="smi_enterprise_code")
*/
class SmiEnterpriseCode extends SCAPBaseModel
{
/**
* @ORM\Column(type="integer", name="code")
*/
protected $code;
/**
* @ORM\Column(type="string", name="name", length=255)
*/
protected $name;
/**
* One SmiEnterpriseCode has Many DeviceGroup
* @ORM\OneToMany(targetEntity="App\Entities\DeviceGroup", cascade={"persist", "remove"}, mappedBy="smi_enterprise_code")
*/
protected $groups;
public function __construct()
{
$this->groups = new ArrayCollection;
}
public function getIana()
{
return $this->code;
}
public function getVendor()
{
return $this->name;
}
public function getGroups()
{
return $this->groups;
}
public function addGroup(DeviceGroup $group)
{
$this->groups->add($group);
$group->setSmi($this);
}
DeviceGroup.php
<?php
namespace App\Entities;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="App\Repositories\DeviceGroup")
* @ORM\Table(name="device_group")
*/
class DeviceGroup extends SCAPBaseModel
{
/**
* @ORM\Column(type="string", name="name", length=255)
*/
protected $name;
/**
* @ORM\Column(type="string", name="oid", length=127)
*/
protected $oid;
/**
* @ORM\Column(type="string", name="hash", length=127)
*/
protected $hash;
/**
* Many DeviceGroup have one SmiEnterpriseCode
* @ORM\ManyToOne(targetEntity="App\Entities\SmiEnterpriseCode", inversedBy="groups")
* @ORM\JoinColumn(name="smi_enterprise_code_id", nullable=false)
*/
protected $smi_enterprise_code;
/**
* One DeviceGroup has Many Device
* @ORM\OneToMany(targetEntity="App\Entities\Device", cascade={"persist", "remove"}, mappedBy="device_group")
*/
protected $devices;
public function __construct()
{
$this->devices = new ArrayCollection;
}
public function setSmi(SmiEnterpriseCode $smi)
{
$this->smi_enterprise_code = $smi;
}
public function toArray()
{
return [
"id" => $this->id,
"active" => $this->active,
"oid" => $this->oid,
"name" => $this->name,
"iana" => $this->smi_enterprise_code->getIana(),
"vendor" => $this->smi_enterprise_code->getVendor(),
"created_at" => parent::formatTimestamp($this->date_created),
"updated_at" => parent::formatTimestamp($this->timestamp)
];
}
}
现在,我只想访问组的SMI,稍后再处理设备。
NB:这些类是从超类扩展而来的,该超类包括诸如id,timestamp ...等常见字段。
这就是我现在得到的:
您可以看到值是null,而我在数据库中创建了条目(无论如何,如果没有SMI,我将无法拥有设备组)。
您知道问题出在哪里吗?
先谢谢您
答案 0 :(得分:0)
最后,我找出了问题的原因。
为了摆脱它,我只需要运行 php artisan doctrine:generate:entities 。
此致