سؤال

في طلبي ، لدي حلقة تنفذ حوالي 1000 مرة ، داخله أقوم بإنشاء كائن وحفظه. هذا هو الجزء من التطبيق حيث أقوم بملء قاعدة البيانات الخاصة بي بالبيانات. مشترك هذا يبدو هكذا:

foreach(...){
    ...
    try{
        $object = new Model_Whatever;
        $object->whatever=$whatever;
        $object->save();}
    catch(Exception $e){
    ...}
}
                    }

هذا ينتج 1000 من استفسارات إدراج. هل من الممكن ، بطريقة ما ، أن ينتج كوهانا إدراج متعددة. تقسيم هذا إلى 10 إدراج مع 100 مجموعة بيانات في كل منها. هل من الممكن ، وإذا كانت الإجابة بنعم ، فما هي الطريقة التي تفعل ذلك؟

هل كانت مفيدة؟

المحلول

في حين أن Kohana ORM لا تدعم إدراج متعدد ، لا يزال بإمكانك استخدام منشئ الاستعلام على النحو التالي:

$query = DB::insert('tablename', array('column1', 'column2','column3'));
foreach ($data as $d) {
    $query->values($d);
}
try {
    $result = $query->execute();
} catch ( Database_Exception $e ) {   
        echo $e->getMessage();
}
  • لا تزال بحاجة إلى تقسيم البيانات حتى لا تحاول أعلاه تنفيذ استعلام باستخدام 1000 إدراج.
  • تفترض بيانات $ مجموعة من المصفوفات مع القيم المقابلة لترتيب الأعمدة

شكرا أشعيا في #kohana

نصائح أخرى

تعمل PHP بطيئة جدًا عند إدخال مجموعة متعددة كبيرة جدًا (بحيث تكون هذه الطريقة :: القيم تحتوي على array_merge) حتى أكثر سرعة:

class Database_Query_Builder_Bath_Insert 
    extends Database_Query_Builder_Insert{

    public static function doExecute($table, $data) {
        $insertQuery = DB::insert($table, array_keys(current($data)));

        $insertQuery->_values = $data;

        $insertQuery->execute();
    }
}
call_user_func_array([$query, 'values'], $data);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top