2017-06-22 16:19:02 2304次浏览 4条回答 0 悬赏 100 金钱

$infoModel = InfoModel::findOne(1);
上面就是查找id为1的数据,我打印过$infoModel,他是个对象
可是 输出以下2句都可以成功打印正确数据:

echo $infoModel -> name; //这个可以理解   他是对象可以->
echo $infoModel['name']; //这个不理解  他不是数组啊

以下是打印的$infoModel:

app\models\InfoModel Object
(
    [_attributes:yii\db\BaseActiveRecord:private] => Array
        (
            [id] => 1
            [name] => 我问问2
            [age] => 32
        )

    [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
        (
            [id] => 1
            [name] => 我问问2
            [age] => 32
        )

    [_related:yii\db\BaseActiveRecord:private] => Array
        (
        )

    [_errors:yii\base\Model:private] => 
    [_validators:yii\base\Model:private] => 
    [_scenario:yii\base\Model:private] => default
    [_events:yii\base\Component:private] => Array
        (
        )

    [_behaviors:yii\base\Component:private] => Array
        (
        )

)

还有顺便问下<?php echo $form -> field($infoModel,'name')->textInput(array('value' => $infoModel['name'])); ?>
这里的field的第一个参数$infoModel是不是一定是模型对象,我试着在控制器把$infoModel转成数组就报错了???

最佳答案

  • drodata 发布于 2017-06-22 17:25 举报

    因为 AR 是 yii\base\model 的后代,而 yii\base\Model 实现了 PHP 预定义的接口 ArrayAccess, 正是这个接口让我们能够像使用关系数组一样访问对象中的属性。

    1 条回复
    回复于 2017-06-22 17:41 回复

    666666

  • 回答于 2017-06-22 16:28 举报

    用ArrayHelper::getValue($infoModel,'name'),也是可以打印的

    1 条回复
    回复于 2017-06-22 16:31 回复

    谢谢 不过我的问题如何解释

  • 回答于 2017-06-22 17:10 举报

    这个你就需要研究研究findOne(),然后研究研究one(),然后如下
    WechatIMG3.jpeg

    1 条回复
    回复于 2017-06-22 17:16 回复

    字面上是说:要么返回数组要么返回ar对象,可是findOne()返回类型难道看他心情?

  • 回答于 2017-06-22 17:28 举报
    class Model extends Component implements IteratorAggregate, ArrayAccess, Arrayable
    
    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
  • 粉丝21
  • 金钱5257
  • 威望40
  • 积分6607

热门问题