如何通过连接列过滤R :: findAll()结果? - RedBeanPHP4

时间:2016-08-27 07:29:24

标签: php mysql redbean

我是RedBeanPHP的新手我研究了他们的文档,但是我们无法找到如何过滤ViewModel结果,就像我们通过R::findAll()过滤共享列表的方式一样?

我的情况:

我有两个表$bean->withCondition('...', [...]);并且它们具有一对多关系意味着每个用户必须具有usertype且多个用户可以是相同类型。

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']);方法,但仅用于检索相关记录,或者通过RedBeanPHP术语工作/仅过滤共享bean。

2 个答案:

答案 0 :(得分:1)

您可以在哪里进行子查询,例如:

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对象或通过数组访问数据(没有转换)

答案 1 :(得分:0)

更容易避免rb连接而只是做mysql

使用

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