RedBean 数据未同步

Posted

技术标签:

【中文标题】RedBean 数据未同步【英文标题】:RedBean Data Not Synchronized 【发布时间】:2012-10-03 09:37:31 【问题描述】:

所以,我一直在尝试在我最近的项目中使用 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 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>

那么,我哪里做错了?为什么我可以显示单个省的 Country 数据,但无法获取多个省的相关 Country?

另外,如果我手动输入省份数据,所有这些代码都可以正常工作。但是,如果我从另一个数据库中导入数据,它就不起作用了

顺便说一下,我用的是最新的RedBean(昨天下载了rb.php)。

【问题讨论】:

这可能是您的模板引擎的问题。 RedBean 按需获取 bean 数据,也许您使用的引擎会以某种方式覆盖此行为... 【参考方案1】:

嗯,我找到了一种解决方法,但我认为这不是最有效的做事方式......

$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
    ));
);

【讨论】:

以上是关于RedBean 数据未同步的主要内容,如果未能解决你的问题,请参考以下文章

不将 php-redbean 的属性保存到数据库

RedBean PHP:有没有办法保护数据库列不被更改? (例如:插入日期)

我可以使用 RedBean PHP ORM 导出 Sqlite 数据库并导入到 MySQL 吗?

使用 Redbean PHP ORM 时,是不是必须在每个脚本中调用 R::freeze()?

RedBean ORM ID 列

redbean php 是不是考虑创建 mysql-triggers?