Phalcon:如何获得不同的模型?
Phalcon: how to get distinct models?
使用Phalcon Model,如何在使用find()
方法获取行时获取不同的行。
如果您声明了一些列,您可以使用:
$result = Word::find(['columns'=>'distinct foo']);
使用生成器:
后面示例的基本实现:
$queryBuilder = $this->getDI()->getModelsManager()
->createBuilder()
->addFrom('tableName', 't');
不同的命令:
$queryBuilder->distinct('t.id');
列也可以,但不推荐:
$queryBuilder->columns('DISTINCT(t.id) AS id')
严格使用模型:
// we are waiting for it, but may still not be implemented
TableModel::find(array('distinct' => 'id'))
计数:
TableModel::count(array("distinct" => "id"));
根据之前的回答不太推荐的方式:
TableModel::find(array('columns' => 'distinct(id)'))
并且 link 我觉得最好 docs。
此外,Phalcon 2.0.2 中存在一些问题。
使用组关键字。
$result = TableModel::find(array("x_id = $x_id","group"=>"uid"));
您可以使用 x_id 向第一部分添加尽可能多的附加参数,例如
x_id = $x_id AND y_id = 100
第二部分是您指定要为 TableModel 分组的字段。
在 phalcon 3.x 中,它看起来像用模型管理器做一个 distinct,distinct 方法以一个布尔值作为参数。所以要在列上做一个不同的,你应该这样做:
$queryBuilder = $this->getDI()->getModelsManager()
->createBuilder()
->addFrom('tableName', 't')
->columns('t.myColumn')
->distinct(true)
->getQuery()
->execute();
在某些情况下,您可能希望在模型初始化时使用它,例如:
/**
* Class MyModel
* @property \Phalcon\Mvc\Model\Resultset\Simple referenceAlias
* @method int countReferenceAlias
*/
class MyModel extends \Phalcon\Mvc\Model
{
public function initialize(): void
{
$this->setSource('my_model');
$this->hasMany('id', 'ReferenceModel', 'reference_id', [
'alias' => 'referenceAlias',
'params' => ['distinct' => 'user_id']
]);
}
}
所以以后你可以这样打电话:
print $myModel->countReferenceAlias();
或
foreach($myModel->referenceAlias() as $userReference){
print $userReference->user->getName();
}
您可以在模型中定义它::initialize() 方法:
$this->hasManyToMany(
'asset_id',
'NameSpace\AssetsCategory',
'asset_id',
'category_id',
'NameSpace\Category',
'category_id',
[
'alias' => 'SimilarAssets',
'params' => [
'group' => 'NameSpace\Category.category_id' // remove duplicate data
]
]
);
使用Phalcon Model,如何在使用find()
方法获取行时获取不同的行。
如果您声明了一些列,您可以使用:
$result = Word::find(['columns'=>'distinct foo']);
使用生成器:
后面示例的基本实现:
$queryBuilder = $this->getDI()->getModelsManager()
->createBuilder()
->addFrom('tableName', 't');
不同的命令:
$queryBuilder->distinct('t.id');
列也可以,但不推荐:
$queryBuilder->columns('DISTINCT(t.id) AS id')
严格使用模型:
// we are waiting for it, but may still not be implemented
TableModel::find(array('distinct' => 'id'))
计数:
TableModel::count(array("distinct" => "id"));
根据之前的回答不太推荐的方式:
TableModel::find(array('columns' => 'distinct(id)'))
并且 link 我觉得最好 docs。
此外,Phalcon 2.0.2 中存在一些问题。
使用组关键字。
$result = TableModel::find(array("x_id = $x_id","group"=>"uid"));
您可以使用 x_id 向第一部分添加尽可能多的附加参数,例如
x_id = $x_id AND y_id = 100
第二部分是您指定要为 TableModel 分组的字段。
在 phalcon 3.x 中,它看起来像用模型管理器做一个 distinct,distinct 方法以一个布尔值作为参数。所以要在列上做一个不同的,你应该这样做:
$queryBuilder = $this->getDI()->getModelsManager()
->createBuilder()
->addFrom('tableName', 't')
->columns('t.myColumn')
->distinct(true)
->getQuery()
->execute();
在某些情况下,您可能希望在模型初始化时使用它,例如:
/**
* Class MyModel
* @property \Phalcon\Mvc\Model\Resultset\Simple referenceAlias
* @method int countReferenceAlias
*/
class MyModel extends \Phalcon\Mvc\Model
{
public function initialize(): void
{
$this->setSource('my_model');
$this->hasMany('id', 'ReferenceModel', 'reference_id', [
'alias' => 'referenceAlias',
'params' => ['distinct' => 'user_id']
]);
}
}
所以以后你可以这样打电话:
print $myModel->countReferenceAlias();
或
foreach($myModel->referenceAlias() as $userReference){
print $userReference->user->getName();
}
您可以在模型中定义它::initialize() 方法:
$this->hasManyToMany(
'asset_id',
'NameSpace\AssetsCategory',
'asset_id',
'category_id',
'NameSpace\Category',
'category_id',
[
'alias' => 'SimilarAssets',
'params' => [
'group' => 'NameSpace\Category.category_id' // remove duplicate data
]
]
);