我是CakePHP的新手,我仍然试图理解类,类名和表名之间的关系。我在问之前试图找到答案,但我担心我不知道应该搜索什么。
所以我是一名自由开发者,我正在努力实现两个目标:
幸运的是,我应该能够同时做两件事:)
所以,我有一个预算的列表,随着时间的推移,它将改变状态。由于我想要了解这些状态更改的历史记录,我不会替换(更新)数据库上的状态,每次状态更改时我都会添加一个新行。所以我将有三个表:一个用于预算,另一个用于状态,第三个表包含这些状态的名称。
我在CakePHP上做了什么:
Budget
,表格budgets
BudgetStatus
,表格budget_statuses
BudgetStatusName
,表格budgets_status_names
与此问题相关的主要课程是:
预算
class Budget extends AppModel {
public $belongsTo = array(
'Client' => array(
'className' => 'Client'
)
);
public $hasMany = array(
'Status' => array(
'className' => 'BudgetStatus',
'order' => 'Status.date DESC',
'dependent' => TRUE
)
);
}
BudgetStatus
class BudgetStatus extends AppModel {
public $hasMany = array(
'StatusName' => array(
'className' => 'BudgetStatusName'
)
);
}
BudgetStatusName
class BudgetStatusName extends AppModel {
}
BudgetsController
class BudgetsController extends AppController {
public $helpers = array('Html', 'Form');
public function index() {
$this->set('budgets', $this->Budget->find('all', array('order' => array('Budget.date' => 'desc'))));
}
public function view($id) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}
$budget = $this->Budget->findById($id);
if (!$budget) {
throw new NotFoundException(__('Invalid post'));
}
$this->set('budget', $budget);
}
}
在查看/预算/ view.ctp 上我写了pr($budget);
,然后当我访问 / budgets / view / 1 时,我看到了这样的结构:
Array
(
[Budget] => Array
(
[id]
[date]
[client_id]
[title]
[description]
[status]
[created]
[modified]
)
[Client] => Array
(
[id]
[name]
[created]
[modified]
)
[Status] => Array
(
[0] => Array
(
[id]
[budget_id]
[budgets_status_names_id]
[amount]
[details]
)
[1] => Array
(
[id]
[budget_id]
[budgets_status_names_id]
[amount]
[details]
)
[2] => Array
(
[id]
[budget_id]
[budgets_status_names_id]
[amount]
[details]
)
)
)
所以,我不知道我做错了什么,但我希望得到[状态]中每个元素的状态名称
表名,类名和列名是否正常?
提前谢谢你,对不起我的英语:)
PS:如果您想知道数据库中的数据是什么样的,这是一个示例(我只显示与此问题相关的列)。
budgets
id | client_id | title
budget_statuses
id | budget_id | date | budgets_status_names_id
budget_status_names
id | name
clients
id | name
答案 0 :(得分:2)
budgets_status_names_id应该是budget_statuses表中的budget_status_name_id。
另外,为了获得更深层次的关联数据,您应该使用可包含的
$this->Budget->find('all', array(
'order' => array('Budget.date' => 'desc')),
'contain' => array('Client', 'Status' => array('StatusName'))
));
将以下内容添加到您的AppModel:
public $actsAs = array('Containable');