#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:
Прошу прощения, код на самом деле довольно правильный. Сбой из-за других проблем.
Спасибо за все.
Приветствую!