2017-02-18 5 views
0

Iは、データベースへのマルチアレイを挿入するために、次のコードを使用します最短のコードを作成するには?

foreach($request->category as $k => $v){ 
       $category[] = array(
        "category_id" => $v, 
        "announcement_id" => $announcement->id 
       ); 
      } 

      AnnouncementCategory::insert($category); 

したがって、入力データがPOST配列$request->categoryです。私はこのコード

をリファクタリングする必要が 私はこのコードを試してみました:モデルAnnouncement

$announcement->categories()->attach($request->category); 

私が持っている:

public function categories() 
    { 
     return $this->hasMany("App\AnnouncementCategory", "announcement_id", "id"); 
    } 

答えて

3

あなたはこのようなあなたのAnnouncementモデルの関係で定義する場合:

public function categories() 
{ 
    return $this->belongsToMany(AnnouncementCategory::class); 
} 

あなたはこのようにそれを行うことができます。私は、あなたの質問を更新参照

$announcement->categories()->attach($request->category); 

EDIT

categoriesの関係が追加されました。私が代わりにhasMany

+0

hasManyです。なぜなら、 'categories'がある場所で' Announcement'モデルで作業するからです。それは動作しません – Darama

+0

未定義のメソッドを呼び出す\ Database \ Query \ Builder :: attach() – Darama

+0

@Darama私のコードで示したように、このbelongshpは 'belongsToMany'として定義されていますか? –

1

リクエストは列に一致する場合は、1行でそれを行うことができます。

AnnouncementCategory::insert($request->all()); 

AnnouncementCategoryモデルでは、su入力できるフィールドを指定するprotected $fillable配列を宣言します。

+0

を示した。しかし、私は、あなたが同じように、アレイを構築することができ、[OK]を各カテゴリ – Darama

+0

のために 'announcement_id'フィールドフィールドを設定する必要があるとして、あなたはbelongsToManyを使用する必要がありますので、しかし、あなたのコードを見て、AnnounceCategoryは、ピボットテーブルむしろありますあなたはあなたの投稿にしましたが、私は問題は表示されません – meda

関連する問題