2012-04-15 115 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