2012-04-15 113 views
2

我使用readbeanphp作为我的php项目的ORM。我试图加载一个额外的地方类的bean。但我不知道如何做到这一点。redbeanphp中多个where子句

一般情况下我得到一个像这样的 '豆':

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

这基本上就像在说:

SELECT * FROM book WHERE id = '$id' 

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

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

我怎样才能做到这一点与redbeanphp?

回答

1

RedBean_Facade::load仅用于主键。如果你想通过一个复杂的查询得豆 使用

R::find一样,

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

了解更多关于R ::找到

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

+0

嗯,那么没有其他办法可以得到一个'豆'呢?我的意思是,大多数查询将拥有至少多个WHERE语句和/或ORDER BY。但是,如果我只能通过使用主键获取bean。如果我真的需要使用普通的sql查询,那么我现在就可以放弃它,因为这个工具对我来说似乎毫无用处。 – Vivendi 2012-04-15 14:24:07

+0

如果你想获得bean。使用R :: find。我现在编辑答案。 – 2012-04-15 14:37:04

+0

如果唯一打算用于包装sql查询,那么你会有一个点,但它远不止于此。 “大多数查询”......是否适用于大多数应用程序?这是一个误导性的评论,无条件的声明应该保持在最低限度,以避免虚假陈述和误导,有意或无意。 – 2014-04-15 08:16:37

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来检查active场豆加载测试它是否有效后:

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

希望这有助于!

0

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

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

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

+0

不应该在变量名中包含“:”吗? – 2015-05-18 18:36:45