Ассоциации моделей плагинов CakePHP не работают

Сценарий: у меня есть приложение CakePHP с плагином Fruit. Плагин Fruit содержит маршрут к TagsController.php с действием index, которое указывает на index.ctp.

Модель тегов имеет одну ассоциацию. Идентификатор пользователя

Проблема: даже если я добавляю параметр соединения в Model->find('all'... индекс ['User'] не определен. Я не уверен, что делать, вот мой код....

ТегиКонтроллер

public function index($ajax = false) {
    $this->Tag->recursive = 2;
    $tags = $this->Tag->find('all', array('conditions' => array('User.id' => $this->Auth->user('id')), 'joins'=>array(
    array(
         'table'=>'users',
         'alias'=>'User',             
         'conditions'=>array(
              'User.id=Tag.user_id'
         )
    ),
    )));

    print_r($tags);

    $this->set('tags', $this->paginate());

    if($ajax == 'ajax')
    {
        $this->layout = 'ajax';
    }
}

Теги Модель

App::uses('FruitAppModel', 'Fruit.Model');
class Tag extends FruitAppModel {

public $name = 'Tag';
public $uses = array('User');
public $belongsTo = array(
    'User' => array(

        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

Модель пользователя

App::uses('AppModel', 'Model');

class User extends AppModel {

public $name = 'User';
public $displayField = 'username';

public $hasMany = array(        
    'Tag' => array(
        'className' => 'Fruit.Tag',
        'foreignKey' => 'tag_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    ),

);

Я застрял в этой проблеме уже несколько часов, поэтому любые свежие идеи о том, что я могу попробовать, очень ценятся. Я довольно хорошо прочесал stackoverflow, и я просто хожу по кругу, мне нужен свежий взгляд на это. Любые идеи вообще были бы потрясающими.

Спасибо!

  • Джефф

person Jeffrey L. Roberts    schedule 13.09.2012    source источник


Ответы (1)


Я думаю, вы многое перепробовали и усложнили, попробуйте этот код, он даст вам желаемый результат.

в пользовательской модели:

public $hasMany = array(        
'Tag' => array(
    'className' => 'Fruit.Tag',
    'foreignKey' => 'user_id',
    'dependent' => false,
    'conditions' => '',
    'fields' => '',
    'order' => '',
    'limit' => '',
    'offset' => '',
    'exclusive' => '',
    'finderQuery' => '',
    'counterQuery' => ''
),

в контроллере: --

$this->Tag->recursive = 1;

 $this->paginate = array(
    'conditions' => array('Tag.user_id' => $this->Auth->user('id'))
);
$data = $this->paginate('Tag');
pr($data);
$this->set(compact('data'));
person Krishna    schedule 13.09.2012
comment
А если сделать наоборот? Если я хочу связать модель в плагине с базовой моделью? - person kappa; 18.09.2015