我正在尝试使用easyAdmin在两个类之间建立一个简单的ManyToMany关系,当我尝试添加时,什么也没发生,所以在配置yml中我添加了by_reference false,但我经常遇到这个错误:
无法确定“App\Entity\Subject”类中属性“users”的访问类型。
这是我的班级用户:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(fields="email", message="Email already taken")
* @ORM\Table(name="user")
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @Assert\NotBlank()
* @Assert\Email()
* @ORM\Column(name="email", type="string", length=255)
*/
private $email;
/**
* @ORM\Column(name="firstname", type="string", length=100)
*/
private $firstname;
/**
* @ORM\Column(name="lastname", type="string", length=100)
*/
private $lastname;
/**
* @ORM\Column(name="username", type="string", length=100, nullable=true)
*/
private $username;
/**
* @var string
*
* @ORM\Column(name="role", type="array", nullable=false)
* @Assert\NotBlank()
*/
private $role;
/**
* @Assert\NotBlank()
* @Assert\Length(max=4096)
* @ORM\Column(name="password", type="string", length=255)
*/
private $password;
/**
* @var \DateTime $createdAt
* @ORM\Column(name="created_at", type="datetime", length=100)
*/
private $createdAt;
/**
* @ORM\ManyToOne(targetEntity="Program", inversedBy="users", cascade={"persist"})
* @ORM\JoinColumn(name="program_id", referencedColumnName="id")
*/
protected $program;
/**
* @ORM\OneToMany(targetEntity="Mark", mappedBy="user", cascade={"remove","persist"})
*/
protected $marks;
/**
* @ORM\Column(name="sortRole", type="string", length=100)
*/
private $sortRole;
/**
* @ORM\ManyToMany(targetEntity="Subject", inversedBy="users", cascade={"persist"})
* @ORM\JoinTable(name="subject_user")
*/
private $subjects;
public function __construct()
{
$this->createdAt = new \DateTime(date('Y-m-d H:i:s'));
$this->sortRole = "ROLE_USER";
$this->subjects = new ArrayCollection();
}
public function __toString(){
return $this->username;
}
public function getId()
{
return $this->id;
}
public function getFirstname()
{
return $this->firstname;
}
public function setFirstname($firstname)
{
$this->firstname = $firstname;
}
public function getLastname()
{
return $this->lastname;
}
public function setLastname($lastname)
{
$this->lastname = $lastname;
}
public function getUsername()
{
return $this->username;
}
public function setUsername($username)
{
$this->username = $username;
}
public function getEmail()
{
return $this->email;
}
public function setEmail($email)
{
$this->email = $email;
}
public function getPassword()
{
return $this->password;
}
public function setPassword($password)
{
$this->password = $password;
}
/**
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @param \DateTime $createdAt
*/
public function setCreatedAt(\DateTime $createdAt)
{
$this->createdAt = $createdAt;
}
/**
* @inheritDoc
*/
public function getSalt()
{
return null;
}
/**
* Set role
*
* @param array $role
*
* @return User
*/
public function setRole($role)
{
$this->role = $role;
return $this;
}
/**
* Get role
*
* @return array
*/
public function getRole()
{
return $this->role;
}
/**
* @inheritDoc
*/
public function getRoles()
{
return $this->role;
}
/**
* @inheritDoc
*/
public function eraseCredentials()
{
}
/**
* Get the value of program
*/
public function getProgram()
{
return $this->program;
}
/**
* Set the value of program
*
* @return self
*/
public function setProgram($program)
{
$this->program = $program;
return $this;
}
/**
* Get the value of marks
*/
public function getMarks()
{
return $this->marks;
}
/**
* Set the value of marks
*
* @return self
*/
public function setMarks($marks)
{
$this->marks = $marks;
return $this;
}
/**
* Get the value of sortRole
*/
public function getSortRole()
{
return $this->sortRole;
}
/**
* Set the value of sortRole
*
* @return self
*/
public function setSortRole($sortRole)
{
$this->sortRole = $sortRole;
return $this;
}
/**
* Get the value of subjects
*/
public function getSubjects()
{
return $this->subjects;
}
public function setSubject(\App\Entity\Subject $subject)
{
$subject->setUser($this);
$this->subjects[] = $subject;
return $this;
}
public function removeSubjects(Subject $subject){
$this->subjects->removeElement($subject);
}
}
这是我的主题课:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity()
* @ORM\Table(name="subject")
*/
class Subject
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="Program", inversedBy="subject", cascade={"persist"})
* @ORM\JoinColumn(name="program_id", referencedColumnName="id")
*/
protected $program;
/**
* @ORM\OneToMany(targetEntity="Mark", mappedBy="subject", cascade={"remove","persist"})
*/
protected $mark;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="subjects")
*/
private $users;
public function __toString(){
return $this->name;
}
public function __construct(){
$this->users = new ArrayCollection();
}
/**
* Get the value of id
*/
public function getId()
{
return $this->id;
}
/**
* Get the value of name
*/
public function getName()
{
return $this->name;
}
/**
* Set the value of name
*
* @return self
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get the value of program
*/
public function getProgram()
{
return $this->program;
}
/**
* Set the value of program
*
* @return self
*/
public function setProgram($program)
{
$this->program = $program;
return $this;
}
/**
* Get the value of mark
*/
public function getMark()
{
return $this->mark;
}
/**
* Set the value of mark
*
* @return self
*/
public function setMark($mark)
{
$this->mark = $mark;
return $this;
}
/**
* Get the value of users
*/
public function getUsers()
{
return $this->users;
}
/**
* Add category
*
* @param User $user
*/
public function addUser(User $user)
{
$this->users[] = $user;
}
public function setUser(\App\Entity\User $user)
{
//$user->setSubject($this);
$this->users[] = $user;
return $this;
}
public function removeUsers(User $user){
$this->users->removeElement($user);
}
}
和 easy_admin.yml 中的小配置:
Inscrit:
class: App\Entity\Subject
form:
fields:
- { property: 'name', label: 'Nom de la matière' }
- { property: 'users', type_options: { mapped: true, by_reference: false} }
我很迷茫,我真的不知道问题出在哪里,我不明白为什么我经常遇到这个错误......