Qeephp ActiveRecord CRUD 操作

每一个 AR(ActiveRecord 的简称) 对象对应一条 数据库 记录,所以 AR 的 CRUD 操作也分为单个记录和多个记录的批量操作。


在数据库中新建一个 AR

方式1:

$post = new Post();
$post->title = 'post title';
$post->body = 'post body';
$post->save();

方式2:

$post = new Post(array(
    'title' => 'post title',
    'body'  => 'post body',
));
$post->save();

上述两种方式的区别仅在于书写方式不同,其他没有区别。



更新数据库中的一个 AR

方式1:

$post = Post::find('post_id = ?', $post_id)->query();
$post->title = 'new post title';
$post->body = 'new post body';
$post->save();

第一种方式首先从数据库 查询已有的记录,然后修改 属性值,再保存。

方式2:

$post = new Post(array(
    'title' => 'post title',
    'body'  => 'post body',
));

$post->changePropForce('post_id', $post_id);
$post->save();

第二种方式直接构造一个新对象,并修改属性值。
再强制将 AR 对象的 post_id 属性指定为特定值,从而实现对已有记录的更新

第二种方式减少了一次数据库查询,效率较高。
但问题在于如果 AR 对象的更新引发了事件操作,那么在事件处理 函数中被处理的 AR 对象就是不完整的。

比如 AR 对象的 before_save 事件需要根据 AR 对象的 updated 属性值(对象最近一次保存到数据库的时间)来更新 缓存 文件。由于第二种方式我们没有从数据库查出已有对象,所以对象的 updated 属性就是空值。这会直接导致 before_save 事件中的代码出错。

所以除非确定不会产生问题,否则尽量不要使用第二种方式来更新对象。


删除数据库中的 AR

方式1:

$photo = Photo::find('photo_id = ?', $photo_id)->query();
$photo->destroy();

方式2:

Photo::meta()->destroyWhere('photo_id = ?', $photo_id);

方式3:

Photo::meta()->deleteWhere('photo_id = ?', $photo_id);

方式1-2是等价的,都是先查询出对象,再调用 destroy() 方法。这种方式的好处是可以在对象的事件处理函数中完成一些额外工作,例如清理缓存,或者删除 AR 对象对应的文件(例如 Photo 对象对应的照片文件)。

方式3是直接删除符合 条件的数据库记录,不需要先查询,性能更好,但是也没法引发事件处理函数。



建了一个数组,array(5,6,7,8,9);是要删除的数据的id,怎么用qee的操作一次全部删除呢?
ModelName::meta()->destroyWhere('id IN (?)', $idArray);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值