插入的行key
,value
为空!
\App\Product::find(1)->getProductMeta()->create([
'key' => 'a key',
'value' => 'a value'
]);
查询SQL:
insert into `product_metas` (`product_id`) values (?)
产品:
function getProductMeta(){
return $this->hasMany('App\ProductMeta');
}
ProductMeta:
protected $fillable = ['key','value'];
移植:
Schema::create('product_metas', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned()->index();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');;
$table->string('key')->index();
$table->text('value')->nullable();
});
答案 0 :(得分:2)
我认为您的代码没有任何问题。只需尝试其中一种方法即可创建关系项。
将此添加到ProductMeta
型号
protected $fillable = ['key', 'value', 'product_id'];
在您的控制器中执行此操作,以便获得有效的产品。
$product = Product::findOrFail(1);
然后
$product->getProductMeta()->create([
'key' => 'a key',
'value' => 'a value'
]);
或者
\App\ProductMeta::create([
'key' => 'a key',
'value' => 'a value',
'product_id' => $product->id
]);
或者
$productMeta = new \App\ProductMeta;
$productMeta->key = 'a key';
$productMeta->value = 'a value';
$productMeta->product_id = $product->id;
$productMeta->save();
答案 1 :(得分:0)
我在我的模型中删除函数__construct解决了我的问题。
我不知道为什么我做了__construct方法!
答案 2 :(得分:-2)
你必须在两个模型中建立关系,例如。产品型号和管理模型
例如,您在product model
public function admin(){
return $this->belongsTo(Admin::class, 'admin_id');
}
并在admin model
public function product(){
return $this->hasMany(Product::class);
}
像这样,表和模型都会相互关联。
PS:我不知道您的确切型号和表格,所以我只假设管理员作为发布者和产品发布,您可以将其更改为您的表名。