2012-11-22 3 views
0

CakePHP의 새로운 기능이지만 Rails를 사용합니다. 내가 CakePHP는이 같은 일을하고 싶습니다 :CakePHP vs Rails 관련 테이블에서 데이터를 가져 오는 방법.

class Manager < ActiveRecord::Base 
    has_many :employees 
end 

및 개체 같은 그런 다음 질문

내가 CakePHP는이 코드를
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 

...

class Manager extends AppModel { 
    public $hasMany = array(
     'Employee' => array(
      'className' => 'Employee', 
      'order'  => 'Employee.created DESC' 
     ) 
    ); 
} 

class Employee extends AppModel { 
    public $belongsTo = 'Manager'; 
} 

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

감사합니다 ...

신화 러쉬

+0

이상한 질문입니다. 케이크를 레일에 연관시키는 것이 혼란 스럽습니까? – simonmorley

답변

2

귀하의 질문은 내가 ID = 1 인 관리자를 검색하고 자신의 종업원을 찾을 수있는 방법 "으로 귀결 CakePHP를 원하는 관리자 항목 검색하려면 다음 찾기 쿼리를 실행 할에서

:.

$manager = $this->Manager->findById(1); 
// or 
$manager = $this->Manager->find('first', array(
    'conditions' => array(
     'Manager.id' => 1 
    ) 
); 

위의 찾기 호출은 데이터베이스에서 ID = 1 관리자를 가져 오기하고 관계 관리자 hasMany의 직원을 설정하기 때문에, 결과는 Employee.created DESC로 주문 관리자에 대해 모든 직원이 포함됩니다.

결과 집합 w 루비 온 레일즈로 당신이 볼 수 있듯이

Array 
(
    [Manager] => Array 
     (
      [id] => 1 
      [field1] => value1 
     ) 

    [Employee] => Array 
     (
      [0] => Array 
       (
        [id] => 2 
        [manager_id] => 1 
        [name] => Bar 
       ) 

      [1] => Array 
       (
        [id] => 1 
        [manager_id] => 1 
        [name] => Foo 
       ) 

     ) 

) 

는, CakePHP의 반환 결과를 배열 형식을 사용하지 대상이 같을 울드. 따라서 결과 배열에서 관련 데이터에 액세스해야합니다.

CakePHP와 Ruby on Rails (RoR)의 또 다른 중요한 차이점은 CakePHP에서 db에 대한 쿼리는 호출하는 순간에 실행되는 반면 RoR에서는 결과에 액세스하려고 시도 할 때 지연 실행된다는 것입니다.

여기 CakePHP의 버전을 직원입니다 액세스하는 RoR에 예를 보완하려면
$employee_count = count($manager['Employee']); 

foreach ($manager['Employee'] as $e) { 
    echo $e['name']; 
} 

내가이 혼란을 지 웁니다 바랍니다.

0

난 당신이 CakePHP에서의 containable 행동을 찾고있다 생각합니다.

모델에 포함 할 수있는 동작을 첨부하는 것이 중요합니다. 그렇지 않으면 작동하지 않습니다.

관련 문제