Проблема с моделью CakePHP HABTM

#php #cakephp #has-and-belongs-to-many

#php #cakephp #имеет-и-принадлежит-многим

Вопрос:

У меня проблема при использовании CakePHP HABTM.

У меня есть следующие модели.

 class Repositorio extends AppModel{
    var $name="Repositorio";

    var $hasAndBelongsToMany = array(
        'Sesion' =>
            array(
                'joinTable' => 'sesions_repositorios',
                'dependent' => true 
            )
        );

    var $order=array('Repositorio.name'=>'ASC');
}

class Sesion extends AppModel{
    var $name="Sesion";

    var $belongsTo=array(
        'SesionsEstado',
        'Asignatura',
        'User'
    );

    var $hasAndBelongsToMany = array('Repositorio'=>
        array(
            'joinTable'=>'sesions_repositorios',
            'dependent' => true 
        )
    );

    var $order=array('Sesion.ffin'=>'ASC');
}
  

И следующих таблиц базы данных.

 CREATE TABLE sesions (
  id INT(11) NOT NULL AUTO_INCREMENT,
  user_id INT(11) NOT NULL,
  sesions_estado_id INT(11) NOT NULL,
  asignatura_id INT(11) NOT NULL,
  name VARCHAR(100) NOT NULL,
  finicio DATETIME NOT NULL,
  ffin DATETIME NOT NULL,
  created DATETIME NOT NULL,
  modified DATETIME NOT NULL,
  PRIMARY KEY(id),
  INDEX sesions_FKIndex1(sesions_estado_id),
  INDEX sesions_FKIndex2(asignatura_id),
  INDEX sesions_FKIndex3(user_id)
);

CREATE TABLE repositorios (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  created DATETIME NOT NULL,
  modified DATETIME NOT NULL,
  PRIMARY KEY(id)
);

CREATE TABLE sesions_repositorios (
  id INT(11) NOT NULL AUTO_INCREMENT,
  sesion_id INT(11) NOT NULL,
  repositorio_id INT(11) NOT NULL,
  PRIMARY KEY(id),
  INDEX sesions_repositorios_FKIndex1(sesion_id),
  INDEX sesions_repositorios_FKIndex2(repositorio_id)
);
  

Когда я сохраняю данные в репозитории, все работает должным образом, то есть выполняется вставка в таблицу «repositorios» и выполняет соответствующую вставку в таблицу «sesions_repositorios.

Моя проблема возникает, когда я получаю список репозиториев для определенного пользователя. Код для этого был бы.

 class RepositoriosController extends AppController{
...
$r=$this->Repositorio->Sesion->find('all', array('conditions'=>array('user_id'=>$this->Session->read('Auth.User.id'))));
var_dump($r);
...
}
  

Переменная $ r не содержит отфильтрованных данных для user_id, почему?, что я делаю не так?

Я не установил внешний ключ, может ли это быть проблемой?

Спасибо за помощь.

Комментарии:

1. Что это за оператор чтения сеанса? Я не могу прочитать все это

Ответ №1:

Я считаю, что вам нужно добавить что-то вроде 'recursive' => 1 или любую другую глубину, которую вы хотите, для поиска связанных моделей в вашем запросе.

 $r=$this->Repositorio->Sesion->find('all', array('conditions'=>array('user_id'=>$this->Session->read('Auth.User.id')),'recursive'=>1));
  

Ответ №2:

Прошу прощения, код на самом деле довольно правильный. Сбой из-за других проблем.

Спасибо за все.

Приветствую!