1

それで、私は最新のプロジェクトで RedBean PHP を使用しようとしてきましたが、今、この奇妙な問題に直面しています。

州と国という単純なデータ構造があり、州のデータをデータベースに保存する次のコードがあります。

$app->post('/admin/provinces/add', function () use ($app)
{
    $province = R::dispense('province');
    $province->name = $app->request()->post('name');

    $country = R::load('country', $app->request()->post('country_id'));
    $country->ownProvince[] = $province;

    $errors = array();

    if (!V::alpha()->notEmpty()->validate($province->name)) $errors[] = 'Province name is required!';

    if (empty($errors)) {
        $id = R::store($province);
        R::store($country);
        $app->redirect(BASE_PATH.'admin/provinces/view/'.$id, 301);
    } else {
        $app->flash('errors', $errors);
        $app->redirect(BASE_PATH.'admin/provinces/add', 301);
    }
});

このコードはうまく機能し、Province と Country データの間の関係が正常に保存されます。Province Bean から Country データにアクセスできます。その逆も同様です。

ただし、既存の州データを他のデータベースからデータベースにインポートすると、次のコードで州データから国データにアクセスできません。

コントローラ

$app->get('/admin/provinces', function () use ($app)
{
    $provinces = R::findAll('province', 'ORDER BY name');
    R::preload($provinces, array('country'));

    $app->render('admin/provinces/index.html.twig', array(
        'provinces' => $provinces
    ));
});

意見

<table class="table table-striped table-hover">
    <thead>
        <tr>
            <th style="width: 10%">{{ b.a("admin/provinces?order=id", "ID") }}</th>
            <th style="width: 45%">{{ b.a("admin/provinces?order=provincename", "Name") }}</th>
            <th style="width: 45%">{{ b.a("admin/provinces?order=provincename", "Country") }}</th>
        </tr>
    </thead>
    <tbody>
        {% for province in provinces %}
            <tr>
                <td>{{ province.id }}</td>
                <td>{{ b.a("admin/provinces/view/"~province.id, province.name) }}</td>
                <td>{{ b.a("admin/countries/view/"~province.country.id, province.country.name) }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>

奇妙なことに、このコードは機能します:

コントローラ

$app->get('/admin/provinces/view/:id', function ($id) use ($app)
{
    $province = R::load('province', $id);
    $country = $province->country;

    $app->render('admin/provinces/view.html.twig', array(
        'province' => $province,
        'country' => $country
    ));
});

意見

<dl class="dl-horizontal">
    <dt>Name</dt><dd>{{ province.name }}</dd>
    <dt>Country</dt><dd>{{ b.a("admin/countries/view/"~country.id, country.name) }}</dd>
</dl>

それで、どこで間違ったのですか?1 つの州から国データを表示できるのに、複数の州から関連する国を取得できないのはなぜですか?

また、都道府県のデータを手動で入力すると、これらのコードはすべて正常に機能します。ただし、別のデータベースからデータをインポートすると機能しません

ところで、私は最新の RedBean (昨日 rb.php をダウンロードしたもの) を使用しています。

4

1 に答える 1

0

まあ、回避策を見つけましたが、それが最も効率的な方法だとは思いません...

$app->get('/admin/provinces', function () use ($app)
{
    $provinces = R::findAll('province', 'ORDER BY name');
    R::preload($provinces, array('country'));

    // Reiterate through all of the beans to load the related bean
    foreach ($provinces as $province) {
        $province->country;
    }

    $app->render('admin/provinces/index.html.twig', array(
        'provinces' => $provinces
    ));
});
于 2012-10-03T10:10:35.360 に答える