2015-12-02 2 views
0

Я хочу получить результат с дополнительным полем через afterFind. В функции cakePHP no afterFind. Используется так protected function _getAttrName() { return $this->_properties['name']; }cakephp 3 получить объект изменений свойств для зависимой модели (таблица)

внутри класса Entity. Но я не получил результат с свойством «attr_name». с поиском()

$this->loadModel('Products'); 
      $this->loadModel('Attributes'); 
    // Get the attributes to use as facets 
    $attributes = $this->Products->Attributes->find(['all', 
                 'order' => 'Attributes.id', 
                 ]) 
                 ->contain(['AttributeTypes']) 
                  ->where([ 
                   'Attributes.filterable' => true, 
                   //'Attribute.required' => true, 
                   ]) 
                   ->hydrate(false) 
                    ->toArray(); 

Могу ли я получить решение?

+0

Вам не нужно '$ this-> loadModel ('Свойства');' в коде здесь. Поскольку вы получаете доступ к атрибутам через '$ this-> Products', он будет автоматически загружен для вас. В противном случае, если вы не используете '$ this-> Products' где-либо еще, вы можете использовать' $ this-> loadModel ('Атрибуты'); 'и затем' $ this-> Attributes-> find'. –

ответ

0

Вам необходимо объявить в классе сущности, какие виртуальные свойства вы хотите отображать при преобразовании в массив или в json. Это соответствующий раздел из документации:

http://book.cakephp.org/3.0/en/orm/entities.html#exposing-virtual-properties

namespace App\Model\Entity; 

use Cake\ORM\Entity; 

class Product extends Entity 
{ 

    protected $_virtual = ['attr_name']; 

    protected function _getAttrName() { 
     return $this->_properties['name']; 
    } 

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