redbeanphp中的多个where子句

时间:2012-04-15 14:10:01

标签: php redbean

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

通常情况下,我会得到一个像这样的'bean':

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

这基本上就像是说:

SELECT * FROM book WHERE id = '$id'

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

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

我如何使用redbeanphp执行此操作?

3 个答案:

答案 0 :(得分: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()但是必须使用PHP在加载bean之后检查active字段以测试它是否有效:

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

希望这有帮助!

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

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