Php 获取Phalcon中的相关用户属性

Php 获取Phalcon中的相关用户属性,php,phalcon,Php,Phalcon,我是Phalcon的新手,正试图编写我的第一个应用程序,并且面临一个文档不太清楚的问题,即获取相关信息的问题 目前我有一个控制器,用户控制器 <?php class UserController extends Phalcon\Mvc\Controller { public function homeAction() { $users = Users::query() ->where('id = :id:')

我是Phalcon的新手,正试图编写我的第一个应用程序,并且面临一个文档不太清楚的问题,即获取相关信息的问题

目前我有一个控制器,用户控制器

<?php

class UserController extends Phalcon\Mvc\Controller
{

    public function homeAction()
    {

        $users = Users::query()
            ->where('id = :id:')
            ->bind(array('id' => '1'))
            ->execute();

        $user = $users->getFirst();

        $this->view->setVar('user', $users->getFirst());

        $primaryStatus = Status::query()
            ->where('userId = :id:')
            ->bind(array('id' => '1'))
            ->execute();

        $this->view->setVar('primaryStatus', $primaryStatus->getFirst());

        $status = Status::query()
            ->where('userId != :id:')
            ->bind(array('id' => '1'))
            ->execute();

        $this->view->setVar('status', $status);

    }

}

一对多关系返回包含零个或多个记录的容器:

{% for r in user.userAttributes %}
    {{ r.profileImage }}
{% endfor %}

我意识到了我的错误,一切都正常工作,Phalcon根本不会以这种方式映射我的结构数据库,因为我在attributes表中定义了一个属性名,而是在usersAttributes表中定义了用户定义的值。因此,无法通过标准方式映射它,因此我必须创建一个新方法并在其他地方实例化它,以便将参数传递给我的视图

我用来解决这个问题的代码在用户模型中,它只是将属性作为对象附加到用户结果对象

public static function fetchUserAttributes($userId)
{

    $modelsManager = Phalcon\DI::getDefault()->getModelsManager();

    $phql = '
    SELECT name, attributeValue
    FROM Attributes
    LEFT JOIN UsersAttributes
    ON UsersAttributes.userId = :userId:
    AND Attributes.id = UsersAttributes.attributeId
    ';

    $rows = $modelsManager->executeQuery($phql, array('userId' => $userId));

    $attributesObj = new \stdClass();

    foreach($rows as $row)
    {

        $attributesObj->{$row['name']} = $row['attributeValue'];

    }

    return $attributesObj;

}

public function afterFetch()
{

    //Attach user attributes
    $this->attributes = Users::fetchUserAttributes($this->id);

}
<?php

/**
 * Users attributes class
 *
 * Represents Holla users attributes
 *
 * @Source('usersAttributes');
 *
 */
class UsersAttributes extends Phalcon\Mvc\Model
{

    public $id;

    public $userId;

    public $attributeId;

    public $attributeValue;

    public function getSource()
    {

        return 'usersAttributes';

    }

    public function initialize()
    {

        $this->belongsTo('userId', 'Users', 'id');
        $this->belongsTo('attributeId', 'Attributes', 'id');

    }

}
{% for r in user.userAttributes %}
    {{ r.profileImage }}
{% endfor %}
public static function fetchUserAttributes($userId)
{

    $modelsManager = Phalcon\DI::getDefault()->getModelsManager();

    $phql = '
    SELECT name, attributeValue
    FROM Attributes
    LEFT JOIN UsersAttributes
    ON UsersAttributes.userId = :userId:
    AND Attributes.id = UsersAttributes.attributeId
    ';

    $rows = $modelsManager->executeQuery($phql, array('userId' => $userId));

    $attributesObj = new \stdClass();

    foreach($rows as $row)
    {

        $attributesObj->{$row['name']} = $row['attributeValue'];

    }

    return $attributesObj;

}

public function afterFetch()
{

    //Attach user attributes
    $this->attributes = Users::fetchUserAttributes($this->id);

}