在Laravel中迁移phpmyadmin中的sql函数时出现问题



我有一个sql函数,我需要将其迁移到phpmyadmin才能使我的代码工作。我进行迁移,插入sql函数的代码,然后进行php手工迁移:fresh-seed它成功地完成并填充了所有表,这表明迁移是有效的。

Migrating: 2022_01_28_115051_add_calculate_distance_function
Migrated:  2022_01_28_115051_add_calculate_distance_function (0.07ms)

但当我进入phpmyadmin时,它并没有创建函数。我以前从未使用过这个sql函数,所以非常感谢您的帮助。我用的是拉拉威尔8.65。这是我的迁移。

迁移

<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesDB;
use IlluminateSupportFacadesSchema;
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;');
}
}

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;");
}

您还可以使用Laravel架构生成器。查看此处的文档

Schema::drop('calculate_distance');
Schema::dropIfExists('calculate_distance');
Schema::create('calculate_distance', function($table)
{
$table->string('latitude');
});

最新更新