javalzbin

javalzbin

多看,多想,多动手。

  • 财富值6926
  • 威望值150
  • 总积分8796

个人信息

  • Active Record (活动记录,以下简称AR)提供了一个面向对象的接口, 用以访问数据库中的数据。一个 AR 类关联一张数据表, 每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列。 一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列。 您可以直接以面向对象的方式来操纵数据表中的数据

    Model 模型是 MVC 模式中的一部分, 是代表业务数据、规则和逻辑的对象。可通过继承 yii\base\Model 或它的子类定义模型类

    Model 类是高级模型Active Record活动记录的基类

    class ActiveRecord extends BaseActiveRecord{
    
    }
    

    然后:BaseActiveRecord继承Model

    abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
    {
    }
    

    所以说,ActiveRecord是Model的子类
    关于什么时候用,我说下我个人的理解:如果你需要跟数据库打交道,那你继承ActiveRecord,否则,你继承Model,当然,由于AR继承自Model,所以它同样也支持Model的数据输入、验证等特性。

    如果你看了官方提供的例子,你会发现,登录的时候,是有一个LoginForm的model,它就是直接继承Model的。而验证用户名密码则交给继承ActiveRecord的AR类。

    LoginForm只做验证,而不跟数据库打交道,而AR的实现类跟数据库打交道。。

    表达能力有限..... 其实你看看官方提供的例子,你大概知道什么时候继承ActiveRecord什么时候继承Model

  • 为了实现贪婪加载。

    // 查找所有订单并以客户 ID 和订单 ID 排序,并贪婪加载 "customer" 表
    $orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all();
    

    文档上有说明 :http://www.yiichina.com/doc/guide/2.0/db-active-record
    这里有对joinWith的说明,也有对贪婪加载的说明

  • 2016-03-10 已签到
    连续签到17天,获得了20个金钱
  • 你用原生sql查询出来的结果,应该是数组,所以,问题不是不能遍历,而是你应该取数组的值,比如$value['id'],而不是$value->id,最好的验证方式,就是你在render给前端前,var_dump出来看看查询出来的结果的数据格式。然后根据格式在前端用相应的方式遍历取值即可

  • 2016-03-09 已签到
    连续签到16天,获得了20个金钱
  • 2016-03-08 已签到
    连续签到15天,获得了20个金钱
  • 索引包含着对数据表里所有记录的引用指针。简单的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。在没有索引的情况下,数据库会遍历全部记录后选择符合条件的;而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。

    建议你看看索引的原理,其实,1楼说的对,跑跑看就知道了

    如果是mysql,可以使用explain语句去查看分析结果,explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

  • 2016-03-07 已签到
    连续签到14天,获得了20个金钱
  • 回复了 的回答

    个人觉得,不是说不能这么做,而是可以直接使用yii提供的增删改操作

    $user = new User();
    $user ->name = 'Qiang';
    $user ->save();           // 一行新数据插入 User表
    

    使用原生sql语句:

    $db->createCommand('INSERT INTO User (name) VALUES (:name)', [
        ':name' => 'Qiang',
    ])->execute();
    

    要多看看文档:http://www.yiichina.com/doc/guide/2.0/db-active-record
    框架这个东西,应该灵活应用,不是说就不能一定怎么做,一定就要那么做,没有这个硬性要求。

    这样写没有问题,其实你的问题应该是静态方法如何使用,跟yii好像就没有多大的关系了。那你了解下静态方法的使用以及场景,就知道了。

  • 个人觉得,不是说不能这么做,而是可以直接使用yii提供的增删改操作

    $user = new User();
    $user ->name = 'Qiang';
    $user ->save();           // 一行新数据插入 User表
    

    使用原生sql语句:

    $db->createCommand('INSERT INTO User (name) VALUES (:name)', [
        ':name' => 'Qiang',
    ])->execute();
    

    要多看看文档:http://www.yiichina.com/doc/guide/2.0/db-active-record
    框架这个东西,应该灵活应用,不是说就不能一定怎么做,一定就要那么做,没有这个硬性要求。

副总裁 等级规则
8796/10000
资料完整度
40/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

6

Ta的访客

20