orderby example php activerecord dao yii2

php - example - order by yii2



InserciĆ³n de lote de ActiveRecord(yii2) (1)

¿Es posible insertar varias filas en una consulta con el ActiveRecord de Yii? ¿O esto solo es posible a través de los objetos DAO de nivel inferior?


Puede usar el método batchInsert() de yii/db/Command . Ver detalles here . Al usarlo con ActiveRecord asegúrese de validar todos los datos antes de insertarlos.

Suponiendo que tiene una matriz de $ modelos con clase Post , se puede hacer así:

$rows = []; foreach ($models as $model) { if (!$model->validate()) { // At least one model has invalid data break; } $rows[] = $model->attributes; }

Si los modelos no requieren validación, puede abreviar el código anterior utilizando ArrayHelper para ArrayHelper $rows array.

use yii/helpers/ArrayHelper; $rows = ArrayHelper::getColumn($models, ''attributes'');

Luego, simplemente ejecuta la inserción por lotes:

$postModel = new Post; Yii::$app->db->createCommand()->batchInsert(Post::tableName(), $postModel->attributes(), $rows)->execute();

PD: el $postModel acaba de usar para extraer la lista de nombres de attirubute, también puede extraerlo de cualquier modelo $ existente en su matriz de $ modelos.

Si no necesita insertar todos los atributos, puede especificarlo al completar $rows array:

$rows[] = [ ''title'' => $model->title, ''content'' => $model->content, ];

No olvides reemplazar $postModel->attributes por [''title'', ''content''] .

En el caso de una mayor cantidad de atributos, puede usar algunas funciones de matriz para especificar los atributos exactos para insertar.