我有 sql 函式,我需要遷移到 phpmyadmin 才能使我的代碼正常作業。我進行遷移,在其中插入 sql 函式的代碼,然后執行 php artisan migrate:fresh --seed 它成功完成并填充了所有表,它表明遷移有效。
Migrating: 2022_01_28_115051_add_calculate_distance_function
Migrated: 2022_01_28_115051_add_calculate_distance_function (0.07ms)
但是當我進入 phpmyadmin 時,它沒有創建函式。我以前從未使用過這個 sql 函式,因此非常感謝任何幫助。我使用 Laravel 8.65。這是我的遷移。
移民
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class AddCalculateDistanceFunction extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::raw('DROP FUNCTION IF EXISTS calculate_distance;
CREATE FUNCTION calculate_distance(lat1 FLOAT, lon1 FLOAT,
lat2 FLOAT, lon2 FLOAT) RETURNS float
READS SQL DATA
DETERMINISTIC
BEGIN
RETURN
111.111 *
DEGREES(ACOS(COS(RADIANS(lat1))
* COS(RADIANS(lat2))
* COS(RADIANS(lon1 - lon2))
SIN(RADIANS(lat1))
* SIN(RADIANS(lat2)))) ;
END
');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::unprepared('DROP FUNCTION IF EXISTS calculate_distance;');
}
}
uj5u.com熱心網友回復:
DB::raw回傳Expression要在查詢生成器中使用的。它不運行sql。
用于DB::statement此。
public function up()
{
DB::statement("DROP FUNCTION IF EXISTS calculate_distance;");
DB::statement("CREATE FUNCTION calculate_distance(lat1 FLOAT, lon1 FLOAT, ...");
}
public function down()
{
DB::statement("DROP FUNCTION IF EXISTS calculate_distance;");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/436655.html
