代码之家  ›  专栏  ›  技术社区  ›  Rocket

Phalcon find with columns参数返回行,而不是模型

  •  2
  • Rocket  · 技术社区  · 9 年前

    当我使用 Model::find() 响应是模型的结果集,但当我添加 columns 参数来限制返回的列-响应是行的结果集。

    例子:

    // Resultset of Models
    $users = \Models\Users\Users::find();
    
    // Resultset of Rows
    $users = \Models\Users\Users::find([
            'columns' => 'id, email'
    ]);
    

    这使得我无法调用模型方法。在::find()方法中,是否有一种方法可以让带列限制的模型结果集?我不确定,但这看起来像个bug,因为Phalcon医生说:

    虽然findFirst()直接返回被调用类的实例(当有数据要返回时),但find()方法返回Phalcon\Mvc\Model\Resultset\Simple。

    在使用 参数

    condition , order , bind 等工作正常(返回型号)。

    法尔康1.3.4

    1 回复  |  直到 9 年前
        1
  •  4
  •   Nikolay Mihaylov Raghu    9 年前

    这不是一个bug,而是预期的行为。 中的信息 the docs 向下滚动一点至Parameters(参数)表并阅读的描述 .

    如果需要使用模型方法或关系,则不应指定列。但如果您追求更好的性能,而不需要模型关系,则应使用 Query Builder .

    其他find()参数(如condition、order e.t.c.)不会影响您使用模型方法的能力。

    findFirst()方法的工作方式也与find()方法类似。示例如下:

    News::findFirst(3);
    
    // Output
    Models\News Object
    (
    ...
    

    指定列时

    News::findFirst([
        'columns' => 'id, created_at'
    ]);
    
    // Output
    Phalcon\Mvc\Model\Row Object
    (
        [id] => 1
        [created_at] => 2016-02-02
    )