2012-04-15 1 views
2

Я использую readbeanphp как ORM для моего проекта php. Я пытаюсь загрузить bean с дополнительным, где clasue. Но я не уверен, как это сделать.multiple where clauses in redbeanphp

Обычно я бы получить «боб», как это:

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

который является в основном, как говорят:

SELECT * FROM book WHERE id = '$id' 

Но мне нужно добавить еще одно условие где положение:

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. Но если я могу получить только компонент, используя только первичный ключ. Если мне действительно нужно использовать обычные sql-запросы для этого, то я могу также удалить его прямо сейчас, поскольку этот инструмент кажется мне бесполезным. – Vivendi

+0

Если вы хотите получить фасоль. используйте R :: find.Теперь я отредактирую ответ. –

+0

Если единственное предназначение - обернуть запросы sql, тогда у вас будет точка, но это намного больше. «Большинство запросов» ... это применимо к большинству приложений? Это вводящий в заблуждение комментарий, а неквалифицированные заявления должны быть сведены к минимуму, чтобы избежать искажения и неправильного направления, преднамеренного или нет. –

4

R::find() и R::findOne() является то, что вы ищете:

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

Или, если вы хотите только один компонент:

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

R::find() вернет несколько бобов, а R::findOne() возвращает только один боб.

Вы могли бы использовать технически 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

Вы не должны включать в имена переменных «:»? –