Laravel将数据从一个表插入另一表错误

时间:2019-03-09 05:16:51

标签: php laravel

尝试从表1中获取if InputDesktopSelected then xGetScreenToBmp(idx) else if SelectDesktop(nil) then // result of SelectDesktop() is a routine that calls SetThreadDesktop begin ConfigMag; xGetScreenToBmp(idx); end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; ,然后将其插入表2中,但返回错误

  

1048列'product_id'不能为空(SQL:插入product_idproduct_detailsproduct_idcategorybrand)值(,外设,车手,1))

代码:

provider_id

可用于产品详细信息模型

$product = Product::create([
     'product_name' => $request['product_name'],
     'quantity' => $request['quantity']
]); 

$product->save();
$product_id = $product->id;

$productDetails = ProductDetails::create([
    'product_id' => $product_id,
    'category' => $request['category'],
    'brand' => $request['brand'],
    'provider_id' => $request['provider_id']
]);

数据库结构:(记得,不久前,我对数据库进行了一些更改,这是出现此错误的时间。)

产品

protected $fillable = ['product_id', 'category', 'brand', 'provider_id'];

产品详细信息:

Schema::create('products', function (Blueprint $table) {
            $table->increments('product_id');
            $table->string('product_name');
            $table->integer('quantity');

此问题已解决

对我而言,这只是一个简单的错误。我应该在Schema::create('product_details', function (Blueprint $table) { $table->integer('product_id')->unsigned(); $table->string('category',255); $table->string('brand',255); $table->integer('provider_id')->unsigned(); $table->foreign('product_id') ->references('product_id') ->on('products') ->onDelete('cascade'); $table->timestamps(); }); 使用'product_id'而不是'$product_id = $product->id'。向所有人道歉。

5 个答案:

答案 0 :(得分:1)

在插入ProductDetails之前,请检查Product是否已保存。另外,请检查您的ProductDetails模型中的可填写字段,是否已添加product_id

    $product = Product::create([
            'product_name' => $request['product_name'],
            'quantity' => $request['quantity']
        ]); 

    if($product) {
        $productDetails = ProductDetails::create([
            'product_id' => $product->id,
            'category' => $request['category'],
            'brand' => $request['brand'],
            'provider_id' => $request['provider_id']
        ]);
    }

更新您的可填充字段,如下所示:

protected $fillable = ['product_id', 'category', 'brand', 'provider_id'];

更新

如果主键为product_id,则应致电$product->product_id

答案 1 :(得分:0)

嘿,您必须像这样更改您的可填充属性:

protected $fillable = ['product_id', 'category', 'brand', 'provider_id'];

答案 2 :(得分:0)

我认为您不需要使用save()方法。在create()方法之后,您可以获取模型对象并直接从中获取ID,但请确保您在db中的ID是id而不是product_id

$product = Product::create([
            'product_name' => $request['product_name'],
            'quantity' => $request['quantity']
        ]); 

 if($product){
    $productDetails = ProductDetails::create([
        'product_id' => $product->id,
        'category' => $request['category'],
        'brand' => $request['brand'],
        'provider_id' => $request['provider_id']
    ]);
 }else{
    echo "Something went wrong";
 }

答案 3 :(得分:0)

您将需要在模型上指定fillableguarded属性,因为默认情况下,所有雄辩的模型都可以防止大规模分配。

您可以指定在模型中可批量分配哪些字段,因此在模型中还需要添加 product_id

型号:

protected $fillable = ['product_id', 'category', 'brand', 'provider_id'];
////only the field names inside the array can be mass-assign

自动假定您的主键列将为id。为了使其正常工作,您应该在模型product.php中设置主键:

protected $primaryKey = 'product_id';

答案 4 :(得分:0)

运行 create 后,您不应运行 save()方法;它是多余的。

您可以尝试运行数据库事务,以了解到底出了什么问题。

try {
    \DB::transaction(function () use($request) {
        $product = Product::create([
            'product_name' => $request['product_name'],
            'quantity' => $request['quantity']
        ]);

        $productDetails = ProductDetails::create([
            'product_id' => $product->id,
            'category' => $request['category'],
            'brand' => $request['brand'],
            'provider_id' => $request['provider_id']
        ]);
    });

    dd('successful');
} catch (\Exception $e) {
    dd( $e->getMessage() );
}