保存实体,通过连接表将表与自身相关联

时间:2014-08-02 09:35:39

标签: cakephp cakephp-3.0

我正在使用CakePHP 3.0构建应用程序。我有一个FactsTable和一个InterferencesTable。干扰有这个领域:

[id][changed_fact_id][influenced_fact_id][trend][modified_by][modified_at][created_by][created_at]

关联看起来像这样:

FactsTable:

 `$this->belongsToMany('InfluencedFacts', [
     'through' => 'Interferences',
     'className' => 'Facts',
     'foreignKey' => 'changed_fact_id'
 ]);
 $this->belongsToMany('ChangedFacts', [
     'through' => 'Interferences',
     'className' => 'Facts',
     'foreignKey' => 'influenced_fact_id'
 ]);`

InterferencesTable:

`$this->belongsTo('ChangedFacts', [
    'className' => 'Facts',
    'foreignKey' => 'influenced_fact_id',
]);
$this->belongsTo('InfluencedFacts', [
    'className' => 'Facts',
    'foreignKey' => 'changed_fact_id',
]);`

我烘焙了我的控制器和视图。保存新事实可以正常工作但关联不会被保存。我试图手动保存关联,但它也不起作用。

如果我在模特协会中犯了错误,请告诉我;)

保存FactsController.php中的代码:

`public function add() {
    $fact = $this->Facts->newEntity($this->request->data);
    if ($this->request->is('post')) {
        if ($this->Facts->save($fact)) {
            $id = $fact->get('id');
            $this->Flash->success('The fact has been saved.');
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error('The fact could not be saved. Please, try again.');
        }
    }
    $aggregates = $this->Facts->Aggregates->find('list');
    $plants = $this->Facts->Plants->find('list');
    $influencedFacts = $this->Facts->InfluencedFacts->find('list');
    $this->set(compact('fact', 'aggregates', 'plants', 'influencedFacts'));
}`

事实实体:

`protected $_accessible = [
    'name' => true,
    'short' => true,
    'description' => true,
    'modified_by' => true,
    'modified_at' => true,
    'created_by' => true,
    'created_at' => true,
    'aggregates' => true,
    'plants' => true,
];`

0 个答案:

没有答案