我正在使用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执行此操作?
答案 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) );
阅读有关查询的更多信息,
答案 2 :(得分:0)
这些答案很好,但可以简化。你应该使用的是:
$book = R::find('books', id =:id AND active =:active, array('id' => $id, 'active' => 1));
然后你可以做你的标准foreach循环返回返回的数据数组。