2013-11-15 3 views
0

У меня есть объект, называемый пользователем, у которого много друзей ... которые также являются пользователями. Некоторые из них уже зарегистрированы, а некоторые нет. Если это не так, я хотел бы добавить нового пользователя с полем «зарегистрированным», установленным в 0, чтобы сказать «это друг пользователя X, но он не находится в приложении»Как правильно настроить отношение до многих отношений для многих?

Итак, в сущности, Я пытался настроить его таким образом (я упростил сущность):

<?php 

namespace Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity 
*/ 
class User 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false, unique=true) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="Entity\User", mappedBy="user", cascade={"persist"}) 
    */ 
    private $friends; 

    /** 
    * @var boolean 
    * 
    * @ORM\Column(name="isregistered", type="boolean", length=1, nullable=false, unique=false) 
    */ 
    private $registered; 


    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->friends = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    // GETTERS AND SETTERS 

} 

Я не уверен, что его правильный способ сделать это .. это?

С другой стороны, и здесь я немного застрял. Я бы хотел, чтобы, когда пользователь регистрировался (я хватаю всех своих друзей из FB), я создал скрипт, который проверяет, зарегистрированы ли некоторые друзья, если да, просто добавьте отношение «многие к большому» между пользователем и его друга (другого пользователя), если нет, создайте профиль только с его именем и зарегистрирован на 0.

Как его оптимизировать?

Я использую Doctrine 2 вместе с codeIgniter. На данный момент моя функция выглядит следующим образом:

public function register() 
    { 
     //Gestion du Formulaire 
     $this->load->library('form_validation'); 
     $this->form_validation->set_rules('id', 'Facebook Id', 'trim|xss_clean|required'); 
     $this->form_validation->set_rules('first_name', 'First Name', 'trim|xss_clean|required'); 
     $this->form_validation->set_rules('last_name', 'Last Name', 'trim|xss_clean|required'); 
     $this->form_validation->set_rules('gender', 'gender', 'trim|xss_clean|required'); 
     $this->form_validation->set_rules('email', 'email', 'trim|xss_clean|required'); 
     $this->form_validation->set_rules('picture', 'picture', 'trim|xss_clean|required'); 

     if($this->form_validation->run()) 
     { 
      //Use Doctrine to register a new user 
      $em = $this->doctrine->em; 

      $user = new Entity\User; 
      $user->setFbId($this->input->post('id')); 
      $user->setFirstName($this->input->post('first_name')); 
      $user->setLastName($this->input->post('last_name')); 
      $user->setGenre($this->input->post('gender')); 
      $user->setEmail($this->input->post('email')); 
      $user->setPicture($this->input->post('picture')); 
      $user->setRegistered(1); 

      foreach ($this->input->post('friends') as $key => $friend) { 
       //Check if the friend is registered with his $friend['id'] 

       $isFriendRegistered = $em->getRepository('Entity\User')->findOneBy(array('fb_id' => $friend['id'])); 

       if ($isFriendRegistered) { // He is registered 
        // then add a relation between those two users 
        $user->setFriends($friend['id']); 
       } 
       else{ // He is not registered 
        // Add a new user with Firstname, fb id and Id 
        $friendToRegister = new Entity\User; 
        $friendToRegister->setFbId($friend['id']); 
        $friendToRegister->setFirstName($friend['name']); 
        $user->setFriends($friend['id']); 
       } 
      } 

      // We can now persist this entity: 

      try 
      { 
       $em->persist($user); 
       $em->flush(); 
      } 
      catch(\PDOException $e) 
      { 
       // Error When Persisting the Entity !! 
       $array = array(
           'errors' => "<p>Server Error</p>", 
           'logged_in' => FALSE 
          ); 

       $this->output 
        ->set_content_type('application/json') 
        ->set_output(json_encode($array)); 

       return FALSE; 
      } 

      //Everything is fine 
      $array = array(
          'logged_in' => FALSE, 
          'success' => TRUE, 
         ); 

      $this->output 
       ->set_content_type('application/json') 
       ->set_output(json_encode($array)); 

      return TRUE; 

     } 
     //Error in the Form validation 
     $this->output 
      ->set_content_type('application/json') 
      ->set_output(json_encode(array( 'errors' => validation_errors(), 
               'logged_in' => FALSE 
              ))); 
     return FALSE; 
    } 

Я не доволен тем, как он выглядит, я уверен, что я пропускаю что-то, как я никогда не указывал многие ко многим отношению к одной и той же сущности ,

Спасибо за вашу помощь (сделать сам реф MTM отн) и советы (о том, как оптимизировать это :)

ответ

Смежные вопросы