SuiteCRM遵循MVC模式,因此也具有模型(M)的概念。
Beans就是SuiteCRM中的模型,它的实现逻辑与咱们平常使用的Model类是一样的,下面我们就来看看SuiteCRM中的Beans是如何使用的。
一、创建bean
1.1如何创建一个新的bean
/**
* BeanFactory Bean的基类
* aaaa_A1是我建的一个模块(对应数据表)
*/
$a1Bean = BeanFactory::newBean('aaaa_A1');
就是如此的简单,这样的话,我们就拥有了一个可以操作数据的bean类了。
注:当你在控制器中使用BeanFactory这个工厂类的时候,无需引入,就可以直接使用。它的位置在 /data/BeanFactory.php
1.2如何获取一个指定的bean
/**
* BeanFactory Bean的基类
* aaaa_A1是我建的一个模块(对应数据表)
* 4344b1cb-0c5f-7729-1523-5f30d32687b0 为数据id,这是个可选参数
*/
$a1Bean = BeanFactory::getBean('aaaa_A1', '4344b1cb-0c5f-7729-1523-5f30d32687b0');
上面代码的功能是:创建bean对象的同时,绑定了某条数据,这样就可以直接对该条数据进行任何操作了。
getBean的第二个参数(数据id)是可选的,传了就是绑定了单条数据,如果不传的话,创建出来的就是一个全新的bean,等同于newBean方法。
接下来,就是最激动人心的时刻了…
二、各种猛如虎的操作(CURD)
2.1查询
1、get_list — 列表查询(可分页)
$a1Bean = BeanFactory::newBean('aaaa_A1');
$data = $a1Bean->get_list(
$order_by = "date_modified DESC", // 排序方式
$where = "modified_user_id = 2", // 查询条件
$row_offset = 0, // 从第几条开始取数据
$limit = 2, // 返回的最大记录数。-1表示没有限制
$max = 2, // 每页最多可返回的条目数。-1表示默认的最大值
$show_deleted = 0 // 表示是否显示被删除的数据,有三个取值 0(不显示删除数据) 1(只显示删除数据) -1(显示全部),默认为0。
);
get_list方法返回一个数组,包括查询的结果 ,分页等信息。
// 返回的数据格式
Array
(
[list] => Array() // 查询结果数据,可直接遍历
[row_count] => 2 // 结果中的总行数
[next_offset] => 2 // 下一页的偏移量;如果没有其他页,则为-1。
[previous_offset] => 2 // 上一页的偏移量;如果是第一页,则为-1。
[current_offset] => 0 // 当前结果的偏移量;从0开始
)
2、get_full_list — 列表查询(无分页)
当你不需要数据分页时,可以使用该方法。
$a1Bean = BeanFactory::newBean('aaaa_A1');
$data = $a1Bean->get_full_list(
$order_by = "date_modified DESC", // 排序方式
$where = "aaaa_A1.modified_user_id = 1", // 查询条件
$check_dates=false, // 是否转换时间显示格式,取值 true/false,默认为false
$show_deleted = 0
);
该方法返回的结果就是一个包含查询结果的二维数组。
3、retrieve_by_string_fields — 查询单条数据
$a1Bean = BeanFactory::newBean('aaaa_A1');
$data= $a1Bean->retrieve_by_string_fields(
// 查询条件
$fields_array = array(
'modified_user_id' => 2,
'name' => '测试'
),
$encode = true, // 结果是否应为HTML编码
$deleted = false // 是否添加删除的过滤器
);
resolve_by_string_fields返回单个结果集,如果没有匹配结果,则返回null。
2.2新增与更新
在SuiteCRM中,新增与更新数据都使用save方法,它是通过检索id字段来区分新增与更新的。
1、新增
$a1Bean = BeanFactory::newBean('aaaa_A1');
$a1Bean->name = '小明';
$a1Bean->description= '测试';
$res = $a1Bean->save();
2、更新
$a1Bean = BeanFactory::newBean('aaaa_A1');
$a1Bean->id= '4344b1cb-0c5f-7729-1523-5f30d32687b0'; // 表中已有的id,若id不存在,则更新失败
$a1Bean->name = '小明';
$a1Bean->description= '测试';
$res = $a1Bean->save();
通过这两段代码我们可以看出,更新比新增多个一行指定id的代码。
当然我们还有另外一种方法,就是getBean,我觉得用它来做更新操作,更适合。
$a1Bean = BeanFactory::getBean('aaaa_A1', '4344b1cb-0c5f-7729-1523-5f30d32687b0');
$a1Bean->name = '测试测试';
$res = $a1Bean->save();
2.3删除
在SuiteCRM中,数据删除是逻辑删除,将deleted字段设置为1,即为删除。
SuiteCRM通过mark_deleted方法实现这一功能。
$a1Bean = BeanFactory::newBean('aaaa_A1');
$id = '4344b1cb-0c5f-7729-1523-5f30d32687b0';
$a1Bean->mark_deleted($id);
$res = $a1Bean->save();
和更新一样,我们也可以通过getBean来实现删除。
$a1Bean= BeanFactory::getBean('aaaa_A1', '4344b1cb-0c5f-7729-1523-5f30d32687b0');
$a1Bean->mark_deleted();
$res = $a1Bean->save();