我正在使用redbean 5.1.0 mariadb和php。
我正在尝试使用RedBeanPHP将一个bean属性(或数据库中的列)设置为UNIQUE。
根据RedBeanPHP官方文档以及许多Google和StackOverflow文章,解决方案是使用函数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 :-(
?>
我已经尝试过,根据另一个谷歌点击,setMeta(...)的其他选项,虽然我认为他们已被弃用。无论如何它们也不起作用。
$bean -> setMeta('buildcommand.unique.0', array('name') );
......还有......
$bean -> setMeta('sys.uniques', array('name') );
......很多人喜欢这些。还尝试使用另一个模式(不是“测试”)。我认为这可能与缺乏执行“ALTER TABLE”的权限有关,但它没有
同时激活了......
R::debug(true)
...但我没有看到RedBeanPHP试图做一个“ALTER TABLE”。
感谢您的帮助
答案 0 :(得分:0)
很抱歉,自版本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');
}
}
}
}