2012-11-15 1 views
1

Symfony2에서 새로 왔지만 레일스를 사용합니다. 나는 Symfony2에서 같은 것을 할 싶습니다 :Symfony2 + Doctrine과 레일스 하우투 관련 테이블에서 데이터를 가져 오기

class Manager < ActiveRecord::Base 
    has_many :employees 
end 

및 개체 같은 그런 다음 질문

나는 Symfony2에서이 코드를
m = Manager.find(1) 
# Sends SQL query SELECT COUNT * FROM EMPLOYEES WHERE MANAGER_ID = 1 
count = m.employees.count 

# Sends SQL query SELECT * FROM EMPLOYEES WHERE MANAGER_ID = 1 
m.employees.each do |e| 
    puts e.name 
end 

...

/** 
* @Entity @Table(name="Manager") 
*/ 
class Manager 
{ 
    /** 
    * @Id @Column(type="integer") @GeneratedValue 
    */ 
    public $id; 

    /** 
    * @Column(type="string") 
    */ 
    public $description; 


    /** 
    * @OneToMany(targetEntity="User", mappedBy="manager") 
    * @var User[] 
    */ 
    private $employees; 
} 

방법 Symfony2에서 (위의 ORM으로 만든 RoR에있는) 위의 기능을 구현할 수 있습니까?

더 많은 정보는 the Symfony2 doctrine docs에서 찾을 수 있습니다

<?php 
// src/Acme/DemoBundle/Controller/ManagerController.php 

// ... 
public function showAllAction() 
{ 
    $repo = $this->getDoctrine()->getRepository('AcmeDemoBundle:Manager'); 
    $managers = $repo->findAll(); 

    return $this->render('AcmeDemoBundle:Manager:list.html.twig', array(
     'managers' => $managers, 
    )); 
} 
{% extend '::base.html.twig' %} 

{% block body -%} 
    {% for manager in managers -%} 
     {{ manager.name }} 
    {% endfor %} 
{% endblock %} 
: 당신이 Dcotrine2의 ORM을 사용하는 경우 도움을

감사합니다 ...

신화 러쉬

답변

1
m = Manager.find(1) 
# Sends SQL query SELECT * FROM EMPLOYEES WHERE MANAGER_ID = 1 
m.employees.each do |e| 
    puts e.name 
end 

관리자 ID에 따라 직원을 찾고있는 것으로 보입니다.

은의이 일대, 양방향 관계 ( doctrine documentation)

<?php 
/** @Entity **/ 
class Manager 
{ 
    // ... 
    /** 
    * @OneToMany(targetEntity="Employee", mappedBy="manager") 
    **/ 
    private $employees; 
    // ... 

    public function __construct() { 
     $this->employees = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 
} 

/** @Entity **/ 
class Employee 
{ 
    // ... 
    /** 
    * @ManyToOne(targetEntity="Manager", inversedBy="employees") 
    * @JoinColumn(name="manager_id", referencedColumnName="id") 
    **/ 
    private $manager; 
    // ... 
} 

컨트롤러

<?php 
    // src/Acme/DemoBundle/Controller/ManagerController.php 

    // ... 
    public function showAllEmployeesForManagerAction($managerId) 
    { 
    $repo = $this->getDoctrine()->getRepository('AcmeDemoBundle:Manager'); 

    $manager   = $repo->find(managerId); 
    $employees  = $manager->getEmployees(); 
    // counting employees 
    $employeesNumber = count($employees); // not passed to template 

    return $this->render('AcmeDemoBundle:Employees:list.html.twig', array(
     'manager' => $manager, 
     'employees' => $employees, 
    )); 
    } 

템플릿

{# src/Acme/DemoBundle/Resources/views/Employees/list.html.twig #} 

{% extend '::base.html.twig' %} 

{% block body -%} 
    <h2>Employees depending on Manager {{manager.name}}</h2> 
    <p>Number of employees : {{employees|length}}</p> 
    <ul> 
    {% for employee in employees %} 
     <li>{{ employee.name }}</li> 
    {% endfor %} 
    </ul> 
{% endblock %} 

희망 당신을 위해이 작업을 시작하자.

데이빗

0

, 그것은 다음과 같이 보입니다 the templating docs에 있습니다.


그러나 RoR은 Active Record를 사용하여 데이터베이스에서 정보를 읽지 않습니다. Symfony2에는 'Model'이 없습니다. 원하는대로 사용할 수 있습니다. 기본적으로 Doctrine2를 사용하지만 Propel도 포함되어 있습니다.

자신 만의 '모델'라이브러리도 사용할 수 있습니다. active record in PHP과 같은 것을 찾고 있다면 유용한 라이브러리를 많이 찾을 수 있습니다.

관련 문제