4

MVP プロジェクト (Nette FW を使用) で ORM に RedBeanPHP 3.5.1 を使用しています。

別のテーブルの要素が所有する、最後に挿入された要素の 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 を入力します。

だから私の質問は次のとおりです。親(ロードされたばかりの)Beanでメソッドを呼び出して作成された所有Beanの最後に挿入されたIDを取得するにはどうすればよいですか?R::store()RedBean にはこれに関する実装がありますか、それとも手動で行う必要がありますか?

RedBeanPHP プロジェクト Web の隅々までブラウジングしましたが、今のところ運がありません。

可能な提案をありがとう、皆さん。

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 に答える