Nauka: Undefined index Při pokusu o přístup one-to-many php

hlasů
0

Mám problém s doktríny. Mám dvě entity a chtějí získat correalation pracovní one-to-many.

Uživatel

/**
 * @Entity
 */
class User
{
    /** @Id @Column(type=integer) @GeneratedValue */
    protected $id;

    /** @Column(type=string) */
    protected $name;

    /**
     * @OneToMany(targetEntity=role, mappedBy=userId, cascade={ALL})
     */
    private $roles;
}

role

/**
 * @Entity
 */
class Role
{
    /** @Id @Column(type=integer) 
     *
     * @ManyToOne(targetEntity=user, inversedBy=roles) 
     * 
     */
     protected $userId;

     /** @Column(type=string) */
     protected $name;
 }

Ale při pokusu o přístup k rolí Uživatele:

var_dump($user->getRoles()->first()->getName());

Upozornění: Undefined index: userId v /home/ubuntu/workspace/atlas/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php na lince 1794 Warning: Invalid argument dodávány pro foreach () v
/ home /ubuntu/workspace/atlas/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php na lince 1798 string (10) ROLE_ADMIN Varování: Neplatný argument dodávány pro foreach () in / home / ubuntu /workspace/atlas/Controller/LoginController.php na řádku 15

Což znamená, že jsem se dostat správné hodnoty, ale několik varování, a nejsem si jistý, jestli jsem je ignorovat.

Položena 20/10/2018 v 13:00
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Jeden uživatel může mít mnoho rolí
jednu roli může patřit mnoho uživatelů

Takže, je sdružení ManyToMany

Vaše mapování jsou špatně definované. Uvědomte si prosím, nahrazovat to s tímhle:

Uživatel

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @Entity
 */
class User
{
    /** 
     * @Id 
     * @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @Column(type="string")
     */
    protected $name;

    /**
     * @ManyToMany(targetEntity="Role", inversedBy="users")
     */
    protected $roles;

    public function __construct()
    {
        $this->roles = new ArrayCollection();
    }

    public function getRoles()
    {
        return $this->roles;
    }

    public function addRole($role)
    {
        if (this->getRoles()->contains($role)) {
            return;
        } else {
            $this->getRoles()->add($role);
            $role->addUser($this);
        }
    }

    public function removeRole($role)
    {
        if (!this->getRoles()->contains($role)) {
            return;
        } else {
            $this->getRoles()->removeElement($role);
            $role->removeUser($this);
        }
    }
}

Role

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @Entity
 */
class Role
{
    /**
     * @Id
     * @Column(type="integer") 
     * @GeneratedValue
     */
    protected $id;

    /**
     * @Column(type="string")
     */
    protected $name;

    /**
     * @ManyToMany(targetEntity="User", mappedBy="roles") 
     */
    protected $users;

    public function __construct()
    {
        $this->users = new ArrayCollection();
    }

    public function getUsers()
    {
        return $this->users;
    }

    public function addUser($user)
    {
        if (this->getUsers()->contains($user)) {
            return;
        } else {
            $this->getUsers()->add($user);
            $user->addRole($this);
        }
    }

    public function removeUser($user)
    {
        if (!this->getUsers()->contains($user)) {
            return;
        } else {
            $this->getUsers()->removeElement($user);
            $user->removeRole($this);
        }
    }
 }

Mějte na paměti:

  1. PHP je velká a malá písmena, proto si pečlivě přečtěte dokumentace.
  2. Názvy tříd by mělo začít s velké písmeno.
Odpovězeno 20/10/2018 v 20:14
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more