laravel - laravle Eloquent ORM mengemas kini berbilang rekod pada satu masa
phpcn_u1582
phpcn_u1582 2017-05-16 16:54:58
0
1
570

Fasih mengemas kini berbilang rekod dalam kelompok

Daripada kumpulan memberikan nilai kepada berbilang medan rekod,
tetapi 根据不同条件对不同记录做不同修改.

Serupa dengan sisipan pukal:

DB::table('users')->insert(array(

array('email' => 'taylor@example.com', 'votes' => 0),

array('email' => 'dayle@example.com', 'votes' => 0),

));

Adakah kenyataan yang serupa

DB::table('users')->update( array(

array('id'=>1, 'email' => 'taylor1@example.com', 'votes' => 1),

array('id'=>2, 'email' => 'dayle2@example.com', 'votes' => 2),

) , 'id' );

Fungsi yang dilaksanakan ialah:
Ubah suai rekod yang sepadan mengikut id:

id=1 'e-mel' ditukar kepada 'taylor1@example.com', 'undi' ditukar kepada 1,
id=2 'e-mel' ditukar kepada 'dayle2@example.com', 'undi' ditukar kepada 2
. . .

CI mempunyai kaedah update_batch yang serupa. Saya ingin menukarnya kepada laravel.

phpcn_u1582
phpcn_u1582

membalas semua(1)
为情所困

Tiada cara yang baik untuk merangkum rangka kerja pada masa ini, tetapi saya baru sahaja google dan melihat jawapan pada stackoverflow yang sangat sepadan dengan soalan anda Perkara berikut disalin daripada stackoverflow, pautan asal ialah http://stackoverflow.com/questions / 26133977/laravel-bulk-update.
Saya telah mencipta fungsi Tersuai Saya untuk Kemas Kini Berbilang seperti update_batch dalam CodeIgniter.
Hanya letakkan fungsi ini dalam mana-mana model anda atau anda boleh buat kelas pembantu dan letakkan fungsi ini dalam kelas itu:

//test data
/*
$multipleData = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name 2' ,
      'date' => 'My date 2'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name 2' ,
      'date' => 'Another date 2'
   )
)
*/

/*
 * ----------------------------------
 * update batch 
 * ----------------------------------
 * 
 * multiple update in one query
 *
 * tablename( required | string )
 * multipleData ( required | array of array )
 */
static function updateBatch($tableName = "", $multipleData = array()){

    if( $tableName && !empty($multipleData) ) {

        // column or fields to update
        $updateColumn = array_keys($multipleData[0]);
        $referenceColumn = $updateColumn[0]; //e.g id
        unset($updateColumn[0]);
        $whereIn = "";

        $q = "UPDATE ".$tableName." SET "; 
        foreach ( $updateColumn as $uColumn ) {
            $q .=  $uColumn." = CASE ";

            foreach( $multipleData as $data ) {
                $q .= "WHEN ".$referenceColumn." = ".$data[$referenceColumn]." THEN '".$data[$uColumn]."' ";
            }
            $q .= "ELSE ".$uColumn." END, ";
        }
        foreach( $multipleData as $data ) {
            $whereIn .= "'".$data[$referenceColumn]."', ";
        }
        $q = rtrim($q, ", ")." WHERE ".$referenceColumn." IN (".  rtrim($whereIn, ', ').")";

        // Update  
        return DB::update(DB::raw($q));

    } else {
        return false;
    }
}

Ia akan Menghasilkan:

UPDATE `mytable` SET `name` = CASE
WHEN `title` = 'My title' THEN 'My Name 2'
WHEN `title` = 'Another title' THEN 'Another Name 2'
ELSE `name` END,
`date` = CASE 
WHEN `title` = 'My title' THEN 'My date 2'
WHEN `title` = 'Another title' THEN 'Another date 2'
ELSE `date` END
WHERE `title` IN ('My title','Another title')
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan