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