2016-09-15 10 views
1

model/entity/Order.php에 가상 파일을 구현했습니다.cakephp에서 모델 엔터티 대신 컨트롤러의 가상 필드에 액세스하는 방법 3.2

하지만 한 페이지 만 액세스하고 싶습니다. 모든 기능을 호출하지 않아도됩니다. 컨트롤러에서 어떻게 가상 필드에 액세스하여 필요한 부분에만 적용 할 수 있습니까?

cakephp 2x 버전에서는 컨트롤러 용으로 만들었지 만 이번에는 3 배속으로 만들 수 없습니다. 제가

아래

상관 제안 이해할 것이다 일부 코드

붙어있다. 감사합니다. 컨트롤러

모델/엔티티/Order.php

protected $_virtual = ['amount']; 

    protected function _getAmount() { 


      $data = []; 
      $data['due'] = $this->_properties['collection']['due_amount']; 
      $data['paid'] = $this->_properties['collection']['total_sale_amount'] - $this->_properties['collection']['due_amount']; 
      return $data; 
     } 

코드는

$Lists = $this->Orders->find('all')->where($condition)->contain(['Collections','Customers'=> ['queryBuilder' => function ($q) { 
           return $q->select(['id','center_name']); 
           }],])->order(['Orders.due_date ASC']); 

답변

2

넌 함수 _get* 선언하여 엔티티의 게터 방법을 사용 하였다. 귀하의 getter 메소드 이름은 _getAmount()입니다. 따라서 $ entity-> amount() 컨트롤러의 엔티티 객체를 사용하여 액세스 할 수 있습니다.

$Lists = $this->Orders->find('all')->where($condition)->contain(['Collections','Customers'=> ['queryBuilder' => function ($q) { 
           return $q->select(['id','center_name']); 
           }],])->order(['Orders.due_date ASC']); 

// Iteration will execute the query. 
foreach ($Lists as $entity) { 
     echo $entity->amount; 
} 

확인 문서에 대한 virtual field in CakePHP 3.x

또한

법인에서 아래 줄 필요가 없습니다, 그래서 당신은 getter 메소드를 사용하고 있기 때문에, 그것을 제거합니다.

protected $_virtual = ['amount']; 
+0

좋습니다. 시도해 보겠습니다. 감사합니다. – sradha

+0

하지만 오류 : 정의되지 않은 메소드 App \ Model \ Entity \ Order :: amount()와 같은 오류가 발생합니다. – sradha

+0

foreach 루프에있는 객체의 유형을 디버그 ($ 엔티티) 할 수 있습니까? –