2014-04-01 34 views
3

在Laravel 4中,如何檢索最後插入的透視記錄的ID?Laravel 4:獲取最後附加記錄的ID

我的模型是這樣定義的:

class Action extends Eloquent 
{ 
    public function people() 
    { 
     return $this->belongsToMany('Person')->withTimestamps()->withPivot('mailing_data'); 
    } 
} 

class Person extends Eloquent { 
    public function actions() 
    { 
     return $this->belongsToMany('Action')->withTimestamps(); 
    } 
} 

,我想打通 $action->people()->attach($person_id);

插入記錄的ID有不使用mysql_insert_id的方法嗎?我更喜歡雄辯的方式。

我使用Laravel 4,不是4.1

回答

2

理論上,應該使用mysqli_insert_id不會過時的mysql_insert_id,但你需要確保你使用相同的連接。

以「雄辯」的方式解決您的問題最簡單和最安全的方法是簡單地使用您已知的事實($person_id以及您附加的人的事情)來通過查詢。

編輯:或者,如果id很重要,請考慮不使用數據透視表。

+0

感謝您的回答。我意識到第二個事實,但我認爲,例如'$ person-> save()'設置生成的id,'attach()'也有類似的方法 –

+0

可能有更好的方法。但是,對於數據透視表ID,使用情況並不多,因此輕鬆地進行檢索並不重要,因此,它並不令我感到驚訝,它不是一種在Eloquent(就我們所能找到的方式)或可能是大多數ORM中。記錄總是獨一無二的,所以你永遠不需要區分其他相同的記錄。我無法想象什麼時候您會知道數據透視表記錄標識,但不知道兩個連接標識。 這裏有個答案是不安全的;它建議你拿起MAX ID。我的方式可能不夠高雅,但它是安全和可以理解的。 –

+0

我知道兩個連接ID。對我而言,一個人可以多次擁有相同的動作,因此存在'person_id'-'action_id'組合的'n'記錄。我在這個數據透視表中有額外的數據,我需要通過郵件隊列訪問,所以我不確定我是否可以依靠MAX ID –