Модель CakePHP не может получить связь с таблицей

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

Уже существует $belongsTo отношения между персоналом, отделом и школой, к которой они принадлежат, и мне также удалось получить соответствующую встречу, когда массив календарей возвращается в индексе календаря, но в идеале я хочу иметь возможность перечислять все встречи с именами календарей, отделов и школы, а не поле id хранится в таблице собраний.

Вот мои таблицы:

dbo.meetings
id (int) *primary key*
calendar_id (int)
department_id (int)
school_id (int)
created (datetime2(7))
modified (datetime2(7))

dbo.calendar
id (int) *primary key*
name (nvarchar(50))
startdate (datetime2(7))
enddate (datetime2(7))
created (datetime2(7))
modified (datetime2(7))

dbo.schools
id (int) *primary key*
name (nvarchar(255))
(other fields)

dbo.departments
id (int) *primary key*
name (nvarchar(255))
(other fields)

Вот контроллер для встреч:

<?php
App::uses('AppController','Controller');

class MeetingsController extends AppController {
public $helpers = array('Form');

public function beforeFilter() {
parent::beforeFilter();
}

public function index() {
$this->set('meetings', $this->Meeting->find('all'));
}
}
?>

Вот модель для встречи:

<?php
App::uses('AppModel','Model');

class Meeting extends AppModel {
public $primaryKey = 'id';
public $recursive = -1;

public $belongsTo = array(
'Calendar' => array(
'className' => 'Calendar',
'foreignKey' => 'calendar_id'
),
'School' => array(
'className' => 'School',
'foreignKey' => 'school_id'
),
'Department' => array(
'className' => 'Department',
'foreignKey' => 'department_id'
)
);
}
?>

В настоящее время index.ctp файл в /View/Meetings просто содержит <?php echo var_dump($meetings); ?> который распечатывает массив, пока я не смогу заставить ассоциацию работать, а затем я буду переустанавливать ее по мере необходимости.

Вот как выглядит массив atm:

array(1) {
[0]=>
array(1) {
["Meeting"]=>
array(6) {
["id"] => string(1) "1"["calendar_id"] => string(1) "1"["department_id"] => string(2) "33"["school_id"] => string(1) "1"["created"] => NULL
["modified"] => NULL
}
}
}

По какой-то причине он просто не получит необходимые данные календаря, отдела и школы, и я этого хочу. Кто-нибудь может помочь?

Изменить: модель для школы

<?php
App::uses('AppModel','Model');

class School extends AppModel {

public $validate = array(
'name' => array(
'required' => array(
'rule' => 'notBlank',
'message' => 'A school name is required.'
)
)
);
}
?>

0

Решение

Убедитесь, что вы включаете Содержимое поведение для использования вашей модели public $actsAs = ['Containable'];: —

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

class Meeting extends AppModel {
public $recursive = -1;
public $actsAs = array('Containable');

public $belongsTo = array(
'Calendar',
'School',
'Department'
);
}

Чтобы применить Containable ко всем моделям, установите его в AppModel, чтобы каждая модель наследовала поведение. Кроме того, пока вы придерживаетесь правил именования CakePHP, вам не нужно указывать className а также foreignKey ваших ассоциаций.

Сейчас $this->Meeting->find('all') в вашем MeetingsController должен вернуть все связанные данные вместе со встречей. Если вы хотите, чтобы он только возвращал некоторые связанные данные, вы можете передать contain вариант к find, Например:-

$this->Meeting->find(
'all',
array(
'contain' => array(
'School',
'Department'
)
)
);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector