2017-06-01 93 views
0

插入的行keyvalue爲空!Laravel - 在hasmany上創建不工作

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

分享這兩個模型的表結構,以及如何獲取'$ product'? – Sandeesh

+0

@Sandeesh它在這裏,在更新 –

+0

如果你尋求幫助,你需要發佈適當的代碼。你沒有公佈我問過的一半?只需複製粘貼您的遷移和控制器方法即可。 – Sandeesh

回答

0

心中已經解決了我與刪除功能__construct問題在我的模型。

我不知道爲什麼我做了一個__construct方法!

-2

你必須在兩個模型,例如,在product model

public function admin(){ 
    return $this->belongsTo(Admin::class, 'admin_id'); 
    } 

,並在您admin model

public function product(){ 
     return $this->hasMany(Product::class); 
    } 

這樣既表和模型產品模型和管理模型

例如,你說會涉及到對方。

PS:我不知道你的確切模型和表格,所以我只是假設管理員作爲發佈者和產品作爲發佈,您可以將其更改爲您的表名稱。

+0

它不是我的方法2上的方法 –

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(); 
+0

:SQLSTATE [23000]:完整性約束違規:1452 Can not添加或更新子行:外鍵約束失敗('store'.'product_metas',CONSTRAINT'product_metas_product_id_foreign' FOREIGN KEY('product_id')REFERENCES'products'('id')ON DELETE CASCADE)(SQL:insert into 'product_metas'()values())''' –

+0

@danialdezfooli它表示產品ID不存在於表格中。您需要驗證產品是否存在。這就是我使用'findOrFail()'而不是'find()'的原因。運行'dd($ product);'並檢查結果。 – Sandeesh

+0

方式3正在工作, –