Laravel DB::table 已提交更新
Laravel DB::table update filed
我有这个问题
DB::table('pro_orders_has_passengers')
->where('title_name','MR.')
->update([
'title_name' => 'mr',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','MRS.')
->update([
'title_name' => 'mrs',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','Miss')
->update([
'title_name' => 'ms',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','Girl')
->update([
'title_name' => 'girl',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','Boy')
->update([
'title_name' => 'boy',
]);
我得到了正确的结果。但我希望在一个查询中得到这个结果。
像这样:
$titlename = ['MR.','MRS.','Miss','Girl','Boy'];
DB::table('pro_orders_has_passengers')
->where('title_name',$titlename)
->update([
........
]);
我该怎么做?
$titlename = ['mr' => 'MR.','mrs' => 'MRS.','ms' => 'Miss','girl' => 'Girl', 'boy' => 'Boy'];
$update_query = "UPDATE pro_orders_has_passengers SET title_name = CASE";
foreach ($titlename as $new_title => $title) {
$update_query = $update_query . " WHEN title_name = '$title' THEN '$new_title'";
}
$update_query = $update_query . " END WHERE title_name IN ('".implode(array_values($titlename), '\',\'')."')";
\DB::statement($update_query);
试试这个方法。它将帮助您进行批量更新。
最终输出将是
UPDATE pro_orders_has_passengers SET title_name = CASE WHEN title_name
= 'MR.' THEN 'mr' WHEN title_name = 'MRS.' THEN 'mrs' WHEN title_name = 'Miss' THEN 'ms' WHEN title_name = 'Girl' THEN 'girl' WHEN title_name = 'Boy' THEN 'boy' WHERE END title_name IN
('MR.','MRS.','Miss','Girl','Boy')
我认为这样你可以实现你正在寻找的东西
$titlename = ['MR.','MRS.','Miss','Girl','Boy'];
for($i=0; $i < count($titlename);$i++) {
DB::table('pro_orders_has_passengers')
->where('title_name',$titlename[$i])
->update(['title_name' => strtolower(str_replace('.', '' , $titlename[$i]))]);
}
或者使用 foreach 循环,以提高代码的可读性:
$titlenames = ['MR.','MRS.','Miss','Girl','Boy'];
foreach($titlenames as $titlename) {
DB::table('pro_orders_has_passengers')
->where('title_name',$titlename)
->update(['title_name' => strtolower(str_replace('.', '' , $titlename))]);
}
试试这个。有关更多信息,请参阅以下链接
1.I want to use CASE statement to update some records in sql server 2005
2.Running 一般声明:https://laravel.com/docs/5.7/database
DB::statement(
UPDATE pro_orders_has_passengers
SET title_name = CASE
WHEN title_name = 'Mr.' THEN 'mr'
WHEN title_name = 'Mrs.' THEN 'mrs'
//-------Others cases-----//
ELSE LASTNAME
END
WHERE title_name IN ('Mr.', 'Mrs.', .....)
);
您可以更新它:
DB::table('table_1')
->join("table_2", "table_1.foreign_id", "=", "table_2.id")
->where("table_1.fied_test", "=", "a_condition")
->where("table_2.user_id", "=", auth()->id())
->update(["table_2.status_test" => "EN_COURS"]);
我有这个问题
DB::table('pro_orders_has_passengers')
->where('title_name','MR.')
->update([
'title_name' => 'mr',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','MRS.')
->update([
'title_name' => 'mrs',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','Miss')
->update([
'title_name' => 'ms',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','Girl')
->update([
'title_name' => 'girl',
]);
DB::table('pro_orders_has_passengers')
->where('title_name','Boy')
->update([
'title_name' => 'boy',
]);
我得到了正确的结果。但我希望在一个查询中得到这个结果。
像这样:
$titlename = ['MR.','MRS.','Miss','Girl','Boy'];
DB::table('pro_orders_has_passengers')
->where('title_name',$titlename)
->update([
........
]);
我该怎么做?
$titlename = ['mr' => 'MR.','mrs' => 'MRS.','ms' => 'Miss','girl' => 'Girl', 'boy' => 'Boy'];
$update_query = "UPDATE pro_orders_has_passengers SET title_name = CASE";
foreach ($titlename as $new_title => $title) {
$update_query = $update_query . " WHEN title_name = '$title' THEN '$new_title'";
}
$update_query = $update_query . " END WHERE title_name IN ('".implode(array_values($titlename), '\',\'')."')";
\DB::statement($update_query);
试试这个方法。它将帮助您进行批量更新。
最终输出将是
UPDATE pro_orders_has_passengers SET title_name = CASE WHEN title_name = 'MR.' THEN 'mr' WHEN title_name = 'MRS.' THEN 'mrs' WHEN title_name = 'Miss' THEN 'ms' WHEN title_name = 'Girl' THEN 'girl' WHEN title_name = 'Boy' THEN 'boy' WHERE END title_name IN ('MR.','MRS.','Miss','Girl','Boy')
我认为这样你可以实现你正在寻找的东西
$titlename = ['MR.','MRS.','Miss','Girl','Boy'];
for($i=0; $i < count($titlename);$i++) {
DB::table('pro_orders_has_passengers')
->where('title_name',$titlename[$i])
->update(['title_name' => strtolower(str_replace('.', '' , $titlename[$i]))]);
}
或者使用 foreach 循环,以提高代码的可读性:
$titlenames = ['MR.','MRS.','Miss','Girl','Boy'];
foreach($titlenames as $titlename) {
DB::table('pro_orders_has_passengers')
->where('title_name',$titlename)
->update(['title_name' => strtolower(str_replace('.', '' , $titlename))]);
}
试试这个。有关更多信息,请参阅以下链接
1.I want to use CASE statement to update some records in sql server 2005
2.Running 一般声明:https://laravel.com/docs/5.7/database
DB::statement(
UPDATE pro_orders_has_passengers
SET title_name = CASE
WHEN title_name = 'Mr.' THEN 'mr'
WHEN title_name = 'Mrs.' THEN 'mrs'
//-------Others cases-----//
ELSE LASTNAME
END
WHERE title_name IN ('Mr.', 'Mrs.', .....)
);
您可以更新它:
DB::table('table_1')
->join("table_2", "table_1.foreign_id", "=", "table_2.id")
->where("table_1.fied_test", "=", "a_condition")
->where("table_2.user_id", "=", auth()->id())
->update(["table_2.status_test" => "EN_COURS"]);