ORM模型中的Phalcon DB准则

ORM模型中的Phalcon DB准则,orm,model,criteria,phalcon,Orm,Model,Criteria,Phalcon,在Phalcon模型中,是否有方法使用SQL“In”条件和其他数据库条件?例如,我想在phalcon中执行这个查询 SELECT user_fullname, user_email FROM tbl_users WHERE user_id IN (1,2,3,4,5) 我知道您可以使用查询生成器,但我希望它是ORM。我希望在我的模型getUsersByds($userIds,$columnsToSelect)中有一个方法,该方法将接受要在表中获取的userid和列的数组 见下面我的模型 <

在Phalcon模型中,是否有方法使用SQL“In”条件和其他数据库条件?例如,我想在phalcon中执行这个查询

SELECT user_fullname, user_email FROM tbl_users WHERE user_id IN (1,2,3,4,5)
我知道您可以使用查询生成器,但我希望它是ORM。我希望在我的模型getUsersByds($userIds,$columnsToSelect)中有一个方法,该方法将接受要在表中获取的userid和列的数组

见下面我的模型

<?php

use Phalcon\Mvc\Model;

class User extends Model
{
/**
 *
 * @var integer
 */
public $user_id;

/**
 *
 * @var string
 */
public $user_email;

/**
 *
 * @var string
*/

public user_phone;
/**
 *
 * @var string
*/
public user_fullname;

public function initialize()
{    $this->hasMany('user_id','Store\Bag','user_id');
}
public function getSource()
{
    return "tbl_user";
}

public function find($parameters = null)
{
    return parent::find($parameters);
}

public function findFirst($parameters = null)
{
    return parent::findFirst($parameters);
}
/**
* I want to execute this query in my model
*  SELECT user_fullname,user_email from tbl_user where user_id IN (1,2,3,4,5);
*/
 public function getUsersByIds($ids=array(), $columns=array())
 {
    if(!is_array($ids))
        $ids = array($ids);
    if(!is_array($columns))
        $columns = array($columns); 

     ...................................
     .........................
      ..............
 }  
}

有两种方法可以做到这一点:

方法1:
inWhere('columnName',array('columnValues'))

这一个放在您的
用户
模型中


方法2:
conditions=>'id IN({ids:array})


我正在手机上打字,所以可能有打字错误。

有两种方法:

方法1:
inWhere('columnName',array('columnValues'))

这一个放在您的
用户
模型中


方法2:
conditions=>'id IN({ids:array})


我正在手机上打字,所以可能有打字错误。

+1 for
{ids:array}
。只需注意:
$columnsToSelect?:“*”
在您的例子中,$columnsToSelect在函数定义中有一个默认值,但如果未设置,它将抛出一个通知。:)它起作用了!我需要方法1。非常感谢你所做的一切help@user1149244如果蒂莫西的回答帮助你考虑接受它作为正确的答案。我有一个后续问题,使用方法1是否可以避免SQL注入?@user1149244是的,它是安全的+1表示
{ids:array}
。只需注意:
$columnsToSelect?:“*”
在您的例子中,$columnsToSelect在函数定义中有一个默认值,但如果未设置,它将抛出一个通知。:)它起作用了!我需要方法1。非常感谢你所做的一切help@user1149244如果蒂莫西的回答帮助你考虑接受它作为正确的答案。我有一个后续问题,使用方法1是否可以避免SQL注入?@user1149244是的,它是安全的!
public function getUsersByIds(array $userIds, $columnsToSelect = '') {
    return self::query()
    ->inWhere('id', $userIds)
    ->columns($columnsToSelect ?: '*')
    ->execute();
}
User::find(['id IN ({ids:array})', 
             'columns' => $columnsToSelect,
             'bind' => array('ids' => $userIds)]);