如何在laravel中的另一个表中获取非整数列

时间:2017-11-06 00:24:28

标签: php mysql laravel

我正在使用laravel 5.5并且在我的购物车表格迁移中有2列couponscarts我有coupon_code这将从coupons表中获取代码结果将是购物车总价的截止价格。

这是我的购物车迁移:

public function up()
    {
        Schema::create('carts', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('product_id')->unsigned();
            $table->integer('coupon_code')->unsigned();
            $table->timestamps();
        });

        Schema::table('carts', function($table) {
            $table->foreign('user_id')->references('id')->on('users');
            $table->foreign('product_id')->references('id')->on('products');
            $table->foreign('coupon_code')->references('code')->on('coupons');
        });
    }

我尝试运行php artisan migrate

时出现此错误
[Illuminate\Database\QueryException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `carts` add constraint `carts_coupon_code_foreign` foreign key (`coupon_co
  de`) references `coupons` (`code`))

  [PDOException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

我该如何解决?

更新

Coupon迁移

public function up()
    {
        Schema::create('coupons', function (Blueprint $table) {
            $table->increments('id');
            $table->string('code')->unique();
            $table->decimal('amount');
            $table->date('valid_from');
            $table->date('valid_to');
            $table->timestamps();
        });
    }
  

主意!

如果我在购物车表格中设置coupon_code字符串并且可以为空,然后将其范围用于验证优惠券表中的优惠券代码然后截止价格怎么办?你觉得那会有用吗?如果有,是否有人帮助我进行该范围?

1 个答案:

答案 0 :(得分:0)

我注意到这两个字段都有不同的数据类型,例如在购物车表中,coupon_code字段是无符号整数,但在优惠券表上,您将代码字段作为字符串。

购物车迁移:

public function up()
{
    Schema::create('carts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->integer('product_id')->unsigned();
        $table->string('coupon_code')->nullable();
        $table->timestamps();
    });

    Schema::table('carts', function($table) {
        $table->foreign('user_id')->references('id')->on('users');
        $table->foreign('product_id')->references('id')->on('products');
        $table->foreign('coupon_code')->references('code')->on('coupons');
    });
}

验证coupon_code(例如IN卡车控制器):

public function add_to_cart(Request $request)
{
    $request->validate([
        'coupon_code' => 'nullable|exist:coupons,code',
    ]);

    if ($request->has('coupon_code')) {

         // get code here
         $code = $request->input('coupon_code');

    }
}