2

我正在使用 readbeanphp 作为我的 php 项目的 ORM。我正在尝试加载一个带有额外 where 子句的 bean。但我不知道该怎么做。

通常我会得到一个像这样的“bean”:

$book = R::load('book', $id);

这基本上就像说:

SELECT * FROM book WHERE id = '$id'

但我需要在 where 子句中添加另一个条件:

SELECT * FROM book WHERE id = '$id' AND active = 1

我怎么能用 redbeanphp 做到这一点?

4

3 回答 3

4

R::find()并且R::findOne()是您正在寻找的:

$beans=R::find("books","active=? AND id=?",array(1,1));

或者,如果您只想要一个 bean:

$bean=R::findOne("books","active=? AND id=?",array(1,1));

R::find()将返回多个 bean,而R::findOne()只返回一个 bean。

从技术上讲,您可以使用R::load()但必须在active加载 bean 后使用 PHP 来检查字段以测试它是否有效:

$bean=R::load("book",$id);
if($bean->active==1){//valid
   //do stuff
}else{//not valid
   //return error
}

希望这可以帮助!

于 2012-04-15T14:45:09.753 回答
1

RedBean_Facade::load仅用于主键。

如果您想通过复杂的查询获取 bean,请使用

R::find像,

$needles = R::find('needle',' haystack = :haystack 
                                  ORDER BY :sortorder', 
    array( ':sortorder'=>$sortorder, ':haystack'=>$haystack ));

阅读更多关于 R::find

http://www.redbeanphp.com/manual/finding_beans

尝试使用 getAll 直接使用参数编写查询

R::getAll( 'select * from book where 
id= :id AND active = :act', 
array(':id'=>$id,':act' => 1) );

阅读有关查询的更多信息,

http://www.redbeanphp.com/manual/queries

于 2012-04-15T14:13:59.860 回答
0

这些答案很好,但可以简化。你应该使用的是:

$book = R::find('books', id =:id AND active =:active, array('id' => $id, 'active' => 1));

然后你可以做你的标准 foreach 循环遍历返回的数据数组。

于 2013-03-07T21:18:20.350 回答