RedBean PHP setMeta(...) 用于 UNIQUE 键不起作用
RedBean PHP setMeta(...) for UNIQUE keys not working
我正在使用 redbean 5.1.0 with mariadb and php。
我正在尝试使用 RedBeanPHP 将一个 bean 属性(或数据库中的列)设置为 UNIQUE。
根据 RedBeanPHP 官方文档以及许多 Google 和 Whosebug 文章,解决方案是使用函数 setMeta(...)
但不幸的是它不起作用。
这是我为测试问题而编写的代码。
<?php
include 'rb.php';
R::setup('mysql:host=localhost;dbname=test', 'root', '');
R::nuke();
// =====================================
$bean = R::dispense('bean');
$bean->name = 'any';
$bean -> setMeta('buildcommand.unique', array(array('name')) );
R::store($bean); // No problem here. As expected :-)
// =====================================
$another_bean = R::dispense('bean');
$another_bean->name = 'any';
R::store($another_bean); // it works !!, but it shouldn't. Exception expected :-(
?>
根据另一个 google 命中,我也尝试过 setMeta(...) 的其他选项,尽管我认为它们已被弃用。反正他们也不管用。
$bean -> setMeta('buildcommand.unique.0', array('name') );
...还有...
$bean -> setMeta('sys.uniques', array('name') );
...很多人都喜欢这些。还尝试使用另一个模式(不是 "test")。我认为这可能与执行 "ALTER TABLE" 的权限不足有关,但没有
还激活了一个...
R::debug(true)
...但我根本没有看到 RedBeanPHP 尝试执行 "ALTER TABLE"。
感谢您的帮助
抱歉,自版本 4.2.0 起不再支持构建命令,如此处所述 https://redbeanphp.com/index.php?p=/changelog
如果您的要求不允许在您的数据库中将属性设置为唯一性,您可以引入一个模型并自行检查属性的唯一性。
class Model_Book extends RedBean_SimpleModel
{
public function update()
{
if (!$this->bean->getId()) {
if (R::findOne("book", "name = ?", array($this->bean->name))) {
throw new Exception('Book with name ' . $this->bean->name . ' already exists');
}
}
}
}
我正在使用 redbean 5.1.0 with mariadb and php。
我正在尝试使用 RedBeanPHP 将一个 bean 属性(或数据库中的列)设置为 UNIQUE。
根据 RedBeanPHP 官方文档以及许多 Google 和 Whosebug 文章,解决方案是使用函数 setMeta(...)
但不幸的是它不起作用。
这是我为测试问题而编写的代码。
<?php
include 'rb.php';
R::setup('mysql:host=localhost;dbname=test', 'root', '');
R::nuke();
// =====================================
$bean = R::dispense('bean');
$bean->name = 'any';
$bean -> setMeta('buildcommand.unique', array(array('name')) );
R::store($bean); // No problem here. As expected :-)
// =====================================
$another_bean = R::dispense('bean');
$another_bean->name = 'any';
R::store($another_bean); // it works !!, but it shouldn't. Exception expected :-(
?>
根据另一个 google 命中,我也尝试过 setMeta(...) 的其他选项,尽管我认为它们已被弃用。反正他们也不管用。
$bean -> setMeta('buildcommand.unique.0', array('name') );
...还有...
$bean -> setMeta('sys.uniques', array('name') );
...很多人都喜欢这些。还尝试使用另一个模式(不是 "test")。我认为这可能与执行 "ALTER TABLE" 的权限不足有关,但没有
还激活了一个...
R::debug(true)
...但我根本没有看到 RedBeanPHP 尝试执行 "ALTER TABLE"。
感谢您的帮助
抱歉,自版本 4.2.0 起不再支持构建命令,如此处所述 https://redbeanphp.com/index.php?p=/changelog
如果您的要求不允许在您的数据库中将属性设置为唯一性,您可以引入一个模型并自行检查属性的唯一性。
class Model_Book extends RedBean_SimpleModel
{
public function update()
{
if (!$this->bean->getId()) {
if (R::findOne("book", "name = ?", array($this->bean->name))) {
throw new Exception('Book with name ' . $this->bean->name . ' already exists');
}
}
}
}