shintio / yii2-profile
无需编写代码即可添加CRUD额外属性。
0.1
2017-11-09 06:16 UTC
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-28 02:17:40 UTC
README
无需更改模型代码即可创建、更新和删除模型的额外属性。
本指南也提供俄语版本,请参阅 此处。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
php composer.phar require shintio/yii2-profile "*"
或添加以下内容到你的 composer.json 文件的要求部分:
"shintio/yii2-profile": "*"
到
开始之前
开始之前,你应该在你的数据库中创建表。你可以在这个文件的末尾找到SQL查询。创建表后,你应该为这些表创建或使用gii生成ActiveRecord模型。
用法
为了添加额外字段,你应该向 'entity_profile_field' 表插入一行。
- code- 字符串,你可以使用此字段。
- name- 字符串,此字段的用户可理解名称。用于向用户显示字段名称。
- type- json,此字段的类型。这个版本只支持
{"type":"text"}。未来更新中将支持更多类型。
命名空间
use shintio\profile\Profile;
通过类名创建Profile对象和ActiveRecord模型
// User- ActiveRecord model $profile=new Profile(User::className());
通过现有的ActiveRecord创建Profile对象
// We can create new User; $user=new User(); // Also we can use existing User; //$user=User::find()->one(); $profile=new Profile($user);
查找Profile
$query=Profile::find(User::className()); // In where function we can use: // Assoc array for '=' condition $query->where(['username'=>'admin']); // username- User's attribute // Indexed array for '%LIKE%' condition $query->andWhere(['LIKE','firstName','Adm']); // firstName- additional profile field $query->orWhere(['lastName'=>'Great']); // lastName- additional profile field $profile=$query->one(); //$profiles=$query->all();
处理字段
echo $profile->getField('firstName'); // Admin $profile->setField('firstName','Moder'); echo $profile->getField('firstName'); // Moder $profile->setField('username','moder'); echo '<pre>'; // Get profile in array of Field ojbects var_dump($profile->getProfile()); // Get profile in assoc array // var_dump($profile->getProfile(true)); // Same as getProfile(true) // var_dump($profile->getProfileInArray()); echo '</pre>'; $profile->save(); // username: moder // firstName: Moder // lastName: Great
生成示例表的SQL可以在文件 example.sql 中找到。你也可以使用此模板为任何实体创建表。在执行此查询之前,将所有 'entity' 替换为你的实体名称。
CREATE TABLE `entity` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `entity_profile` ( `id` int(11) NOT NULL, `entity_id` int(11) NOT NULL, `field_id` int(11) NOT NULL, `value` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `entity_profile_field` ( `id` int(11) NOT NULL, `code` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `type` json NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `entity` ADD PRIMARY KEY (`id`); ALTER TABLE `entity_profile` ADD PRIMARY KEY (`id`), ADD KEY `entity_id` (`entity_id`), ADD KEY `field_id` (`field_id`); ALTER TABLE `entity_profile_field` ADD PRIMARY KEY (`id`); ALTER TABLE `entity_profile` ADD CONSTRAINT `entity_profile_ibfk_1` FOREIGN KEY (`field_id`) REFERENCES `entity_profile_field` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `entity_profile_ibfk_2` FOREIGN KEY (`entity_id`) REFERENCES `entity` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; COMMIT;