Rumah > Soal Jawab > teks badan
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.
为情所困2017-05-16 16:56:58
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')