Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在eloquent中创建多列主键_Php_Mysql_Sql_Laravel_Eloquent - Fatal编程技术网

Php 如何在eloquent中创建多列主键

Php 如何在eloquent中创建多列主键,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我在数据库中存储经理、课程类型和课程年数 我将根据递增值命名课程,例如 Course_type course_order course_year Course_type[0] 1 2015 Course_type[0] 2 2015 Course_type[0] 3 2015 Course_type[0] 4

我在数据库中存储经理、课程类型和课程年数

我将根据递增值命名课程,例如

    Course_type    course_order      course_year

    Course_type[0]      1              2015 
    Course_type[0]      2              2015
    Course_type[0]      3              2015
    Course_type[0]      4              2015
    Course_type[0]      1              2016
    Course_type[1]      1              2015
    Course_type[2]      1              2015
    Course_type[2]      2              2015
所以我创建了一个数据库

Schema::create('courses', function (Blueprint $table) {
            $table->increments('id');
            $table->enum('course_type', [
                'Yos',
                'TomerABC',
                'TomerA1A2',
                'TomerB1B2',
                'TomerC1C2',
                'TomerAB',
                'TomerBC',
                'SatMatGeo',
                'SatCriRea',
                'SatCriReaMat',

            ]);

            $table->integer('added_by');
            $table->integer('start');
            $table->integer('year_code');
            $table->integer('end');
            $table->integer('course_order');
            $table->unique( array('added_by','year_code','course_order') );
这是我在createprocess上的控制器

$courseorder = \App\Courses::where('added_by', \Auth::id())
            ->where('year_code', $input['year_code'])->max('course_order');

$course->course_order = $courseorder + 1;
但由于我在数据库中查找max('course\u order'),如果我删除了,就让我们假设course order 2。下一个增加的课程将是4而不是3

所以我的问题是,在删除一个后,如何检查填充位置的课程顺序之间缺少的值


另外,我认为mysql解决方案将比php更快更好

您可以使用新表存储已删除的记录。
当您首先需要一个新的课程订单号时,您应该检查DeletedCourses表。如果DeletedRecord具有匹配的记录,请将其从DeletedRecords表中删除,并将其用于新课程订单

搜索丢失的数字是常见的SQL问题。我会用理货台的方法。