Laravel 4:获取最后一个关联记录的ID

3
在Laravel 4中,我如何检索最后插入的pivot记录的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的方法?我更喜欢使用Eloquent的方式。

我正在使用Laravel 4,而不是4.1。

1个回答

2

最好使用mysqli_insert_id而不是已弃用的mysql_insert_id,但您需要确保使用相同的连接。

在“Eloquent”方式中解决问题的最简单和最安全的方法是仅使用您已知的事实($person_id和您要附加人员的事物)通过查询找到枢轴记录ID。

编辑:或者,如果id很重要,请考虑不使用枢轴表。


谢谢你的回答。我知道第二个事实,但是我认为,例如$person->save()设置了生成的ID,对于attach()也有类似的方法。 - Stefan S
可能有更好的方法,但是对于数据透视表ID的使用情况并不多,因此轻松检索它并不重要,这就解释了为什么在Eloquent(据我们所知)或者大多数ORM中都没有这种方式。记录总是唯一的,因此您永远不需要区分其他相同的记录。我无法想象您何时会知道数据透视表记录ID而不知道两个连接ID。这里有一个不安全的答案,它建议您只需选择最大ID即可。我的方法可能不够优雅,但是它是安全和易懂的。 - Paul Gregory
我知道这两个连接ID。对我来说,一个人可以多次执行相同的操作,因此存在n条记录与person_id-action_id组合。我在这个数据透视表中有额外的数据需要通过邮寄队列访问,所以我不确定是否可以依赖于MAX ID。 - Stefan S
啊,你正在将人员附加到操作上。我会以不同的方式设计这个 - 我所谓的Action,我会称之为ActionType,并且我只会使用一个简单的PersonActions表格来存储相关的ID、日期和其他数据。因此,您最终会得到ID,因为您将像往常一样执行$personAction->save() - Paul Gregory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接