簡體   English   中英

CakePHP將模型關聯添加到數據庫表中

[英]CakePHP add model association into database table

我是CakePHP的新手,英語不是我的母語,所以如果我的問題不清楚,我深表歉意。 無論如何,我有兩個模型: DeveloperGame

<?php
class Developer extends AppModel
{
    var $name = 'Developer';
    var $belongsTo = array('Game');
}
?>

<?php
class Game extends AppModel
{
    var $name = 'Game';
    var $hasMany = array('Developer');
}
?>

我如何能夠在表developer_games中添加僅具有game_id和developer_id字段的新行,該行指示游戲和開發人員之間存在關系,而實際上不知道游戲和開發人員的ID,因為它們是在同時。 我以為CakePHP可以為我做到這一點,但不會在developer_games表中添加新行。 保存數據后是否需要檢索Game和Developer的“ id”字段,然后將關系模型數據手動保存到developer_games表中?

這是我用來向數據庫中添加新游戲和開發人員的代碼:

$data = $this->Game->saveAll(array(
    'Game' => array(
        'game_id' => $data['GameId'],
        'game_name' => $data['GameName'],
    ),
    'Developer' => array(
        'Developer' => array(
            'username' => $_POST['dev_username'],
            'password_hash' => $_POST['dev_password'],
        ),
    ),
));
$this->Game->saveAll($data);

如果我不清楚某些事情,請告訴我,我會澄清。 很長時間以來,我一直在努力解決這個問題,因此,我將不勝感激。 謝謝!

如果我沒有誤解邏輯圖上多對多游戲與開發人員的關系,那么應該是[Game] -1:N- [Assignment] -N:1- [Developer]此處的分配是您的“ developer_games”表,為方便起見,建議您重命名表格

根據您的情況,在CakePHP中推薦的實現應為3個模型類。

<?php
class Developer extends AppModel
{
    var $name = 'Developer';
    var $hasMany = array('Assignment');
}
?>

<?php
class Game extends AppModel
{
    var $name = 'Game';
    var $hasMany = array('Assignment');
}
?>

<?php
class Assignment extends AppModel
{
    var $name = 'Assignment';
    var $belongsTo = array('Game','Developer');
}
?>

這是添加新任務的代碼

//retrieved submitted data --> $data
$data = $this->data;

// this is for the case you want to insert into 3 tables at a same time
$newGame = $this->Game->create();
$newGame = array(
    'Game'=> array(
        'name' => $data['Game']['name']
    )
);
$this->Game->save($newGame);
$newGameId = $this->Game->getLastInsertId();

$newDev = $this->Developer->create();
$newDev = array(
    'Developer'=> array(
        'name' => $data['Developer']['name']
    )
);
$this->Developer->save($newDev);
$newDevId = $this->Developer->getLastInsertId();

/**
* or if you already have Game Id, and Developer Id, then just load it on, and 
* put it in the statement below, to create a new Assignment
**/
$newAssignment = $this->Assignment->create();
$newAssignment = array(
    'Assignment' => array(
        'game_id' => $newGameId,
        'developer_id' => $newDevId,
    )
);
$this->Assignment->save($newAssignment);

請閱讀以下內容: http ://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM“ hasAndBelongsToMany”是您想要的關系。 Cake會關心關聯,因此您不需要聯接表模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM