CakePHP的链式关系

时间:2014-02-12 20:59:49

标签: php mysql sql cakephp

我是CakePHP的新手,我仍然试图理解类,类名和表名之间的关系。我在问之前试图找到答案,但我担心我不知道应该搜索什么。

所以我是一名自由开发者,我正在努力实现两个目标:

  • 建立一个网页,以记录我的预算,项目,客户,发票等。
  • 学习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

1 个答案:

答案 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');
相关问题