2017-08-03 56 views
0

我在laravel 5.4中使用Doctrine 2.0創建了一個簡單的項目。我有三個表格:用戶,角色,user_roles。從HEIDISQL表模式截圖我在下面:laravel中的學說,獲取所有用戶的職責

用戶adas

角色enter image description here

user_rolesenter image description here

我有三個實體類每張桌子當然:

<?php 
namespace TodoList\Http\Entities; 

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



/** 
* @ORM\Entity 
* @ORM\Table(name="users") 

*/ 

class User 
{ 


    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue 
    * @ORM\Column(type="integer") 
    * 
    */ 
    private $id; 
    /** 
    * 
    * @ORM\Column(type="string") 
    * 
    */ 
    private $name; 
    /** 
    * 
    * @ORM\Column(type="string") 
    * 
    */ 
    private $email; 

    /** 
    * @ORM\OneToMany(targetEntity="Task", mappedBy="user", cascade={"persist"}) 
    * @var ArrayCollection|Task[] 
    */ 
    private $tasks; 
    /** 
    * @ORM\OneToMany(targetEntity="UserRole", mappedBy="user") 
    */ 
    protected $user_roles; 


    /** 
     * User constructor 
     * @param @name 
     * @param @email 
     * @param $password 
     */ 
    public function __construct($name, $email) { 


     $this->name = $name; 
     $this->email = $email; 
     $this->tasks = new ArrayCollection(); 
     $this->user_roles = new ArrayCollection(); 
    } 

    /** 
     * 
     * @return mixed 
     * 
     * 
     */ 

    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getTasks() 
    { 
     return $this->tasks; 
    } 
    public function addTask(Task $task) 
    { 
     if(!$this->tasks->contains($task)) { 

      $task->setUser($this); 
      $this->tasks->add($task); 
     } 
    } 
    public function getId(){ 

     return $this->id; 
    } 
    public function getUserRoles(){ 

     return $this->user_roles; 
    } 


} 


<?php 
namespace TodoList\Http\Entities; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* @ORM\Entity 
* @ORM\Table(name="roles") 
* 
*/ 
class Role{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string") 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="description", type="text") 
    */ 
    private $description; 

    /** 
    * @ORM\OneToMany(targetEntity="UserRole", mappedBy="role",cascade={"persist"}) 
    */ 
    protected $user_roles; 

    public function getId(){ 

     return $this->id; 

    } 
    public function getName(){ 

     return $this->name; 
    } 
    public function getDescription(){ 

     return $this->description; 

    } 

} 


<?php 
namespace TodoList\Http\Entities; 
use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* @ORM\Entity 
* @ORM\Table(name="user_roles") 
*/ 
class UserRole 
{ 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    /** 
    * 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="user_roles") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    * 
    */ 
    private $user; 

    /** 
    * 
    * @ORM\ManyToOne(targetEntity="Role", inversedBy="user_roles") 
    * @ORM\JoinColumn(name="role_id", referencedColumnName="id") 
    */ 
    private $role; 

    public function setUser(User $user) 
    { 
     $this->user = $user; 

     return $this; 
    } 

    /** 
    * Get user 
    * 
    * @return \NVC\UserBundle\Entity\User 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 

    /** 
    * Set recipe 
    * 
    * @param \NVC\RecipeBundle\Entity\Recipe $recipe 
    * @return UserRecipeAssociation 
    */ 
    public function setRole(Role $role) 
    { 
     $this->role = $role; 

     return $this; 
    } 

    /** 
    * Get recipe 
    * 
    * @return \NVC\RecipeBundle\Entity\Recipe 
    */ 
    public function getRole() 
    { 
     return $this->role; 
    } 
} 

我有一個問題,當我試圖檢索角色的特定用戶的教條實體Managar。我嘗試這樣做,以這種方式:

public function showUserRoles(EntityManagerInterface $em){ 

     $userRoles = $em->getRepository('\TodoList\Http\Entities\UserRole'); 
     $userRoles->findBy(['user' => 2]); 
     //count($userRole); 


    } 

有一個錯誤的方法,從findBy 錯誤消息:

(1/1)FatalErrorException
主義\ COMMON \代理\ AbstractProxyFactory :: getProxyDefinition(): 失敗開口需要 'C:\ XAMPP \ htdocs中\項目\存儲\ proxies__CG__TodoListHttpEntitiesRole.php' (include_path中= 'C:\ XAMPP \ PHP \ PEAR')

我的實體有問題嗎?我不知道我怎麼能解決這個問題。有人可以幫助我嗎? 我會非常greateful 最好的問候;)

+0

學說配置不正確。 –

+0

我怎樣才能配置學說propery? –

+0

正式的學說文件就足夠了。尤其是代理目錄必須設置,並且必須可由Web服務器進程寫入 –

回答

0

您需要設置文件夾C:\xampp\htdocs\Project\storage\proxies\爲可寫,然後你需要通過控制檯命令生成代理:

doctrine:generate:proxies