Laravel - 创建onmany不工作

时间:2017-06-01 14:29:49

标签: php laravel

插入的行keyvalue为空!

\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();
        });

3 个答案:

答案 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:我不知道您的确切型号和表格,所以我只假设管理员作为发布者和产品发布,您可以将其更改为您的表名。