Phalcon:如何获得不同的模型?

时间:2015-06-13 14:40:34

标签: php phalcon

使用Phalcon Model,如何使用find()方法获取行时获取不同的行。

6 个答案:

答案 0 :(得分:9)

使用构建器:

后续示例的基本实现:

    $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)'))

并链接到imo best docs

此外,Phalcon 2.0.2还存在一些问题。

答案 1 :(得分:3)

如果您已声明了某些列,则可以使用:

 $result = Word::find(['columns'=>'distinct foo']);

答案 2 :(得分:0)

在某些情况下,您可能希望在模型初始化时使用它,例如:

/**
 * 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();
}

答案 3 :(得分:0)

您可以在模型中定义它:: initialize()方法:

const https = require('https')

const data = JSON.stringify({
  todo: 'Buy the milk'
})

const options = {
  hostname: 'yourURL.com',
  port: 443,
  path: '/todos',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
}

const req = https.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`)

  res.on('data', (d) => {
    process.stdout.write(d)
  })
})

req.on('error', (error) => {
  console.error(error)
})

req.write(data)
req.end()

答案 4 :(得分:-1)

使用group关键字。

$result = TableModel::find(array("x_id = $x_id","group"=>"uid"));

您可以使用x_id向第一部分添加任意数量的附加参数,例如

x_id = $x_id AND y_id = 100

第二部分是您指定要为TableModel分组的字段。

答案 5 :(得分:-1)

在phalcon 3.x中,它看起来与模型管理器不同,不同的方法将布尔值作为参数。因此,要对列进行区分,您应该这样做:



 $queryBuilder = $this->getDI()->getModelsManager()
        ->createBuilder()
        ->addFrom('tableName', 't')
        ->columns('t.myColumn')
        ->distinct(true)
        ->getQuery()
        ->execute();