使用Phalcon Model,如何使用find()
方法获取行时获取不同的行。
答案 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();