Quiero escribir una consulta siguiente en registro activo.cómo usar IN & Between Clause en YII ACtive Record?
SELECT *
FROM `User`
WHERE `UserId`
IN (6, 7, 8, 9) ;
Gracias
Quiero escribir una consulta siguiente en registro activo.cómo usar IN & Between Clause en YII ACtive Record?
SELECT *
FROM `User`
WHERE `UserId`
IN (6, 7, 8, 9) ;
Gracias
Usted puede poner su matriz como un valor para un atributo específico, como esto (no probado):
$model=new User();
$result=$model->findAllByAttributes(array('UserId'=>array(6,7,8,9)));
¿Por qué el nuevo usuario()? ¿Es eso superior a User :: model() de alguna manera? –
Hola Bob, el usuario es el nombre del modelo bajo protegidas/modelos/user.php –
Creo que Bob estaba preguntando ¿por qué hacerlo en dos líneas en lugar de un solo usuario :: 'modelo() -> findAllByAttributes (array ('UserId' => array (6,7,8,9))); '? –
Puede utilizar CDbCriteria
declaración:
$criteria = new CDbCriteria();
$criteria->addInCondition('userId', array(6,7,8,9));
$result = User::model()->findAll($criteria);
¿Existe una solución igual que la de [tag: yii2]? – SaidbakR
Todavía uso de esta manera:
public function getInterval($data_start, $data_stop){
$criteria = new CDbCriteria;
$criteria->condition = "date >= '$data_start' AND date <= '$data_stop'";
return $criteria;
}
$model = Object::model()->findAll(getInterval('2014-06-01','2014-06-30');
¿no está expuesto a la inyección SQL? – Justinas
buena pregunta. Lo buscare. –
Si desea obtener su consulta rápida, utilice el comando Constructor:
Yii::app()->db->createCommand()
->select('*')
->from('user')
->where(array('in', 'UserId', array(6, 7, 8, 9)))
->queryAll();
Para conseguirlo a través de CActiveRecord, utilice findAllByAttributes
User::model()
->findAllByAttributes(array(
'UserId' => array(6,7,8,9)
));
pero conseguirá llena de objetos de usuario con todos relaciones asociadas, por lo que es más lento.
'donde (array ('in', 'column_name', array())' me salvó, ¡salud! – Mave
Hay una función llamada findAllBySql
en yii para ejecutar la consulta SQL y obtener los resultados.
$sql="SELECT * FROM `User` WHERE `UserId` IN (6, 7, 8, 9)";//Your Sql query
$value=User::model()->findAllBySql($sql);// "User" is the model belongs to the table 'User'
El "$ value" devolverá el resultado en una matriz. Para obtener los valores, puede usar el siguiente método.
foreach($value as $val){
echo $val->UserId;
}
(o)
var index=0;
echo $val[$index]->UserId;
Es posible utilizar tanto dentro como entre las declaraciones a través CDbCriteria:
$criteria = new CDbCriteria();
$criteria->addInCondition("id", array(6,7,8,9));
$criteria->addBetweenCondition('id', '10', '20', 'OR');
$result = User::model()->findAll($criteria);
Esto resultará en la consulta SQL como esto:
SELECT *
FROM `User`
WHERE `id`
IN (6, 7, 8, 9)
OR `id` BETWEEN 10 AND 20
Tenga en cuenta el 4 ° parametro O en addBetweenCondition() metodo; faltándolo, se aplicará Y predeterminado para concatenar esa condición al resto de la consulta WHERE.
P.S. Estrictamente hablando, esos métodos addBetweenCondition()
y addInCondition()
se deben agregar a una condición existente. Por lo tanto, es posible que tenga que configurar primera condición inicial de un criterio de esta manera:
$criteria->condition = '1=1';
O se puede utilizar addInCondition o también puede utilizar comparar método.
$criteria = new CDbCriteria();
$criteria->compare('UserId',array(6,7,8,9));
$userDataObj = User::model()->findAll($criteria);
Lo sentimos, no recibo su pregunta ......? – Pushpendra
Está buscando la sintaxis de CActivRecord en Yii para generar una instrucción de SQL como en este ejemplo. –
¡Considera aceptar la respuesta a tu pregunta! – Justinas