2016-08-27 34 views
2

我是RedBeanPHP的新手我研究過他們的文檔,但無法找到如何過濾R::findAll()的結果,比如我們如何通過$bean->withCondition('...', [...]);過濾共享列表?如何通過連接列篩選R :: findAll()結果? - RedBeanPHP4

我的情況:

我有兩個表user, usertype,他們有一個一對多的關係,意味着每個用戶必須有一個用戶類型和多個用戶可以是同一類型。

table: usertype

+--------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+--------+------------------+------+-----+---------+----------------+ 
| id  | int(11) unsigned | NO | PRI | NULL | auto_increment | 
| name | varchar(10)  | NO | UNI | NULL |    | 
| psname | varchar(10)  | NO | UNI | NULL |    | 
+--------+------------------+------+-----+---------+----------------+ 

table: user

+-------------+---------------------+------+-----+-------------------+----------------+ 
| Field  | Type    | Null | Key | Default   | Extra   | 
+-------------+---------------------+------+-----+-------------------+----------------+ 
| id   | int(11) unsigned | NO | PRI | NULL    | auto_increment | 
| username | varchar(16)   | NO | UNI | NULL    |    | 
| password | char(60)   | NO |  | NULL    |    | 
| email  | varchar(64)   | NO | UNI | NULL    |    | 
| is_active | tinyint(1) unsigned | NO |  | 0     |    | 
| created_at | datetime   | NO |  | CURRENT_TIMESTAMP |    | 
| usertype_id | int(11) unsigned | NO | MUL | NULL    |    | 
+-------------+---------------------+------+-----+-------------------+----------------+ 

所以現在我只想檢索其類型是不ADMIN的用戶,但下面不工作:

$not_admins = R::findAll('user', 'WHERE @joined.usertype.type != ?', ['ADMIN']);

您可以檢查相同的語法是否適用於withCondition()方法,但僅用於檢索相關記錄,或者由RedBeanPHP術語工作/僅篩選共享bean。

回答

0

容易避免RB加入,只是做的mysql

使用

R::exec('select from user inner join other on some id=id where foo = :foo',['foo'=>'some_value']

+0

沒有讀你的全表結構,我想你已經得到了它的要點 – Nick

0

你可以做一個子查詢,其中,爲前:

R::findAll('users', '(SELECT type FROM usertype WHERE usertype.id = users.id) != :type', [':type'=>'admin']);

另一個方式,您可以按照Nick的建議運行正常查詢,但使用$query = R::getAll('...')而不是$query = R::exec('...');然後你可以使用R::convertToBeans($query);來獲取bean對象或通過數組訪問數據(不需要轉換)