2016-08-27 6 views
2

私はRedBeanPHPを初めて使いましたが、ドキュメントを調べましたが、$bean->withCondition('...', [...]);で共有リストをフィルタリングする方法のようにR::findAll()の結果をフィルタリングする方法を見つけることができませんでしたか?R :: findAll()の結果を結合カラムでフィルタリングする方法は? - RedBeanPHP4

私の場合:

は、私は2つのテーブルuser, usertypeを持っており、彼らは1対多の関係を持っているが、すべてのユーザーがユーザータイプを持っている必要がありますし、複数のユーザーが同じタイプであることを意味します。

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用語集の作業/フィルタのみで共有ビーンのみを検索する場合にのみ有効です。

答えて

0

RBを避けるためには合流し、ちょうど

使用

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

+0

完全なテーブル構造を読んでいませんでした。 – Nick

0

をのmysql行うあなたは元のために、上のサブクエリを行うことができます簡単:

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

別のNickの提案どおりに通常のクエリを実行できますが、の代わりに$query = R::getAll('...')を使用してください次にR::convertToBeans($query);を使用して、Beanオブジェクトを取得したり、配列(変換なし)でデータにアクセスすることができます

関連する問題