Я унаследовал проект, который использует Cakephp 2.0 и Angular для разных вещей, и я искал, как делать объединения и ассоциации моделей.
У меня есть модель, которая имеет ассоциации с таблицей пользователей, например
App::uses('AppModel', 'Model');
class Booking extends AppModel {
public $belongsTo = array(
'Trainer' => array(
'className' => 'User',
'foreignKey' => 'to_user'
),
'Participant' => array(
'className' => 'User',
'foreignKey' => 'user'
)
);
}
Это работает. Однако у меня есть опасения по поводу скорости и безопасности всегда получать всю таблицу пользователей каждый раз, когда вы получаете доступ к бронированию. Большая часть данных передается угловым, а затем отображается через javascript, и я нашел несколько мест, когда программа передает результаты поиска модели непосредственно в угловое, а затем позволяет обрабатывать распространение этих данных. Я беспокоюсь, что если я добавлю в эти ассоциации, то где-то я теперь могу передать свою пользовательскую таблицу в javascript, который будет включать конфиденциальные данные.
Мне интересно, можно ли добавлять ассоциации во время выполнения с помощью вызова функции. например.
App::uses('AppModel', 'Model');
class Booking extends AppModel {
public function getUserInfo(){
$this->$belongsTo = array(
'Trainer' => array(
'className' => 'User',
'foreignKey' => 'to_user'
),
'Participant' => array(
'className' => 'User',
'foreignKey' => 'user'
)
);
}
}
Затем в контроллере используйте:
$this->loadModel("Booking");
$this->Booking->getUserInfo();
Это направлено на то, чтобы вы контролировали, также связаны ли связанные таблицы.
Вы можете создавать ассоциации на лету следующим образом,
App::uses('AppModel', 'Model');
class Booking extends AppModel {
public function getUserInfo(){
$this->bindModel(
array('belongsTo' => array(
'Trainer' => array(
'className' => 'User',
'foreignKey' => 'to_user')),
'Participant'=> array(
'className' => 'User',
'foreignKey' => 'user' ) )
);
return $this->find('all');
}
}