Doctrine Query - Получить подчиненные объекты - PullRequest
0 голосов
/ 15 ноября 2018

Я использую Doctrine ORM в своем проекте Laravel. У меня есть три таблицы:

  • Smi
  • Группа устройств
  • Устройство

Каждое устройство имеет группу устройств, а каждая группа устройств имеет smi. Что я хочу сделать с Doctrine - это опросить все группы и получить их устройства и их smi.

Вот мой запрос в PHP (из репозитория):

   $results = $this->_em->createQueryBuilder()
            ->select('dg')
            ->from($this->_entityName, 'dg')
            ->innerJoin('dg.smi_enterprise_code', 'sec')
            ->getQuery()
            ->getResult();

Вот структура таблиц:

Таблица device_group:

Table devicegroup

Каждая группа устройств имеет один smi_enterprise_code (через smi_enterprise_code_id)

Таблица smi_enterprise_code:

Table smienterprisecode

Настольное устройство:

Table device

Эти таблицы были созданы с использованием ремесленника с тезисами классов:

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 групп, позже я буду иметь дело с устройствами.

Примечание: классы происходят из суперкласса, который включает в себя общие поля, такие как id, timestamp ...

Вот что я получаю в данный момент:

What I get

Как видите, значения равны нулю, тогда как я создал записи в базе данных (и в любом случае у меня не может быть группы устройств без SMI).

Вы видите, в чем проблема?

Заранее благодарю,

1 Ответ

0 голосов
/ 18 ноября 2018

Наконец-то я выяснил причины своей проблемы.

Мне просто нужно запустить php artisan doctrine: generate: entity , чтобы избавиться от него.

С уважением,

...