尝试从表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_id
(product_details
,product_id
,category
,brand
)值(,外设,车手,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'
。向所有人道歉。
答案 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)
您将需要在模型上指定fillable
或guarded
属性,因为默认情况下,所有雄辩的模型都可以防止大规模分配。
您可以指定在模型中可批量分配哪些字段,因此在模型中还需要添加 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() );
}