2012-07-14 84 views
0

我正在編寫一個小型框架,我的目標是讓我的開發人員在添加/插入資源之後輕鬆設置重定向到資源的詳細信息頁面。使用PDO/MySQL獲取不止最後一個插入ID使用PDO/MySQL獲取不止最後一個插入ID

通常,這將與PDO :: lastInsertID()一樣簡單,但我使用的不僅僅是ID來標識資源,還使用了資源名稱/標題的格式化版本。

例如,一個新的錦標賽可能被稱爲「測試錦標賽」,因此它的資源URI將是domain.com/tournament/328-test-tournament。

所以當我在插入後重定向時,我需要重定向到'328-test-tournament'而不是'328'。這是出於URL完整性目的而設計的。我不希望人們使用錯誤匹配的ID和標題訪問個人資源。

所以說,我插入後,我希望能夠自動返回不僅ID,但爲我輸入的全部數據集,以便我可以格式化標題和重定向。

我可以在控制器中做到這一點:

$this->TournamentModel->insert(); 

$id = PDO::lastInsertID(); 
$title = my_title_formatting_function($_POST['title']); 
@header("Location: domain.com/tournament/{$id}-{$title}"); 

但我想一個解決方案,就是稍微更優雅是這樣的:

的$ id = $這個 - > TournamentModel-> lastInsert();

其中lastInsert實際上是核心模型中的公共方法,它不僅檢索最後一個插入的標識,而且還檢索整個行。然後我會在那裏處理標題格式和id連接。

是否有這樣的事情存在?或者至少有一個PDO方法返回插入的表,以便我可以使用表名和ID構造一個查詢?

+0

插入後,從上一個插入ID中選擇所需的所有字段 – 2012-07-14 21:25:37

回答

1

檢查DoctrinePropel

它們是兩個非常有名的對象關係映射器,它們都以PDO爲基礎。 ORM's可以做你所問的,並有許多其他功能,你會喜歡,檢查它。

1

「標題」是否不屬於Tournament對象?即

class TournamenentModel { 
    private $id; 
    private $title; 

    public function setTitle($title) { 
    $this->title = $title; 
    } 

    public function getTitleFormatted() { 
    return my_title_formatting_function($this->title); 
    } 
} 

在這種情況下,您的插入方法可能看起來像

PDO::save(array('title' => $this->title)); 

和您的工作流程是沿着線:

$tournament = new TournamentModel(); 
$tournament->setTitle($_POST['title']); 
$tournament->insert(); 

$title = $tournament->getTitleFormatted(); 
@header("Location: domain.com/tournament/{$id}-{$title}"); 

標題在內存中堅持直到你釋放對象,沒有必要保存並且然後從數據庫中檢索