Yii:通过PHP表达式在活动记录中查找

Yii:通过PHP表达式在活动记录中查找,php,activerecord,yii,Php,Activerecord,Yii,假设您有一个活动记录模型,其中包含一组记录: id | name --------- 1 | Record1 2 | Record2 3 | Record3 有权查看每条记录的用户以逗号分隔的方式存储在另一个表中,使用外键表示记录: foreignId | users ----------------- 1 | joe, doe, zoe 2 | joe 3 | doe, zoe 有一个身份验证管理器规则,用于检查当前用户是否具有查看记录的权限

假设您有一个活动记录模型,其中包含一组记录:

id | name
---------
1 | Record1
2 | Record2
3 | Record3
有权查看每条记录的用户以逗号分隔的方式存储在另一个表中,使用外键表示记录:

foreignId | users
-----------------
1         | joe, doe, zoe
2         | joe
3         | doe, zoe
有一个身份验证管理器规则,用于检查当前用户是否具有查看记录的权限。您给它一个记录id,它检查权限表以查看用户是否在逗号分隔字段中

Yii::app()->authManager->checkAccess('seeRecord', $id);
是否有一种使用CActiveRecord传递PHP表达式“查询”的简单方法?比如:

Record::model()->findByPHPExpression('Yii::app()->authManager->checkAccess('seeRecord', array('id' => 'id'));
user | record
--------------
1 | joe
1 | doe
1 | zoe
2 | joe
3 | doe
3 | zoe
如果表达式为当前记录返回true,则将添加该记录


谢谢

您遇到了一些严重的非yii相关问题,您的数据库架构错误,请阅读一些关于

您应该有一个中间表,如果用户可以看到各种记录,并且记录可以被各种用户看到,那么您需要一个中间表

用户,用户\u可以看到\u记录,记录

IntRedicate表将有两个主键,分别是用户id和记录id

对于您的示例,此表将包含以下内容:

Record::model()->findByPHPExpression('Yii::app()->authManager->checkAccess('seeRecord', array('id' => 'id'));
user | record
--------------
1 | joe
1 | doe
1 | zoe
2 | joe
3 | doe
3 | zoe

Yii提供这种开箱即用的“多人”关系。但请阅读数据库规范化,这是一个重要的主题,数据库设计是任何项目开发的关键步骤。

您有一些严重的非yii相关问题,您的数据库模式错误,请阅读一些

您应该有一个中间表,如果用户可以看到各种记录,并且记录可以被各种用户看到,那么您需要一个中间表

用户,用户\u可以看到\u记录,记录

IntRedicate表将有两个主键,分别是用户id和记录id

对于您的示例,此表将包含以下内容:

Record::model()->findByPHPExpression('Yii::app()->authManager->checkAccess('seeRecord', array('id' => 'id'));
user | record
--------------
1 | joe
1 | doe
1 | zoe
2 | joe
3 | doe
3 | zoe

Yii提供这种开箱即用的“多人”关系。但是请阅读关于数据库规范化的内容,这是一个重要的主题,数据库设计是任何项目开发的关键步骤。

是的,我以前读过一些关于规范化的内容,但我选择在这种情况下进行非规范化。我根本不是一个数据库专家,所以我将遵循您的建议并在这里进行规范化。我想一定有充分的理由去规范化。谢谢,@asgaroth如果您使用MySQL(或任何其他带有外键的RDMB)创建InnoDB表,gii将自动创建您的关系。如果你正在使用MySQL,这个工具可能会对你有用:谢谢@schmunk,目前我正在使用phpmyadmin,但我会给你一个工作台的机会,soonYes,我以前读过一些关于规范化的内容,但我选择在这种情况下进行非规范化。我根本不是一个数据库专家,所以我将遵循您的建议并在这里进行规范化。我想一定有充分的理由去规范化。谢谢,@asgaroth如果您使用MySQL(或任何其他带有外键的RDMB)创建InnoDB表,gii将自动创建您的关系。如果您正在使用MySQL,这个工具可能会对您有用:谢谢@schmunk,目前我正在使用phpmyadmin,但我很快会给您一个使用workbench的机会