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
            ]
        ]
    );