4

我在我的 MVP 项目(由 Nette FW 提供支持)中使用 RedBeanPHP 3.5.1 for ORM。

我需要获取最后插入元素的 ID,该元素由另一个表中的元素拥有。您可以在下面找到我刚刚描述的表示功能的方法:

public function createSite($userId, $siteName, $feedUrl, $reloadTime, $reloadRate){
    $site = R::dispense('site');
    $site->user_id = $userId;
    $site->name = $siteName;
    $site->feed = $feedUrl;
    $site->reload_time = $reloadTime;
    $site->reload_rate = $reloadRate;

    $user = R::load('user', $userId);
    $user->ownSite[] = $site;
    $id = R::store($user);

    return $id; 
}

现在我假设那条线

$id = R::store($user);

站点 ID存储到$id变量中,因为它由现有用户拥有。取而代之的是,它用我不再使用的用户 ID 填充变量。

所以我的问题是:如何获取刚刚通过调用R::store()父(刚刚加载)bean 上的方法创建的拥有 bean 的最后插入 ID?RedBean 中有对此的实现还是我必须手动执行此操作?

我浏览了 RedBeanPHP 项目网站的每个角落,但到目前为止还没有运气。

感谢您的建议,伙计们。

4

3 回答 3

6

使用常识,我终于想出了如何优雅地解决这个问题,因为到目前为止没有人回答我的问题,所以让我自己做吧。

由于R::store($user)能够同时存储$user$site,因此误导性地不需要$site手动存储对象。

但是,如果您需要获取所拥有 bean 的最后插入的 id,这样做确实没有什么坏处。通过存储$site对象框架将做完全相同的事情,除此之外它返回 resired id

所以正确的方法实现是这样的:

public function createSite($userId, $siteName, $feedUrl, $reloadTime, $reloadRate){
    $site = R::dispense('site');
    $site->user_id = $userId;
    $site->name = $siteName;
    $site->feed = $feedUrl;
    $site->reload_time = $reloadTime;
    $site->reload_rate = $reloadRate;

    $user = R::load('user', $userId);
    $user->ownSite[] = $site;

    $id = R::store($site);
    R::store($user);

    return $id;
}

因此,总而言之,向 RedBeanPHP ORM FW 致敬,我真诚地希望这对将来遇到类似问题的人有所帮助。

于 2013-11-14T12:11:25.057 回答
0

不确定这是否是 7 年前的正确答案,但至少现在不需要做任何额外的工作:

$shop = R::dispense( 'shop' );
$shop->name = 'Antiques';
$vase = R::dispense( 'product' );
$vase->price = 25;
$shop->ownProductList[] = $vase
R::store( $shop );
echo $vase->$id; // <-- yes, id which was created by database is present here
于 2021-01-09T23:23:39.383 回答
0

有一个函数叫做 R::findLast('...')

$last_record = R::findLast('...');
于 2020-02-02T07:30:31.920 回答