2017-02-18 4 views
0

나는 데이터베이스에 다중 배열을 삽입하려면 다음 코드를 사용합니다가장 짧은 코드를 만드는 방법은 무엇입니까?

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

가 :

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

당신이 이런 식으로 작업을 수행 할 수 있습니다

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

편집

난 당신이 질문을 업데이트 참조 categories 관계가 추가되었습니다. 하지만 당신의 코드를 찾고, 내가 hasMany

+0

hasMany이다.'categories'가있는 곳에'Announcement' 모델로 작업하기 때문입니다. 그것은 작동하지 않습니다 – Darama

+0

정의되지 않은 메서드를 호출하십시오. \ Database \ Query \ Builder :: attach() – Darama

+0

@Darama이 코드는 "belongsToMany"로 정의되어 있습니까? –

1

당신은 한 줄에 그것을 할 수 나는이 코드를 시도 코드

리팩토링 할 필요가 :

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

AnnouncementCategory 모델의 경우 su 어떤 필드를 채울 수 있는지 지정하는 protected $fillable 배열을 선언하십시오. 이처럼 Announcement 모델 관계를 정의하는 경우

+0

대신 가리 켰을 때, 당신이 belongsToMany를 사용해야하므로 AnnounceCategory는 피벗 테이블 오히려입니다하지만 – Darama

+0

확인, 다음처럼 배열을 구축 할 수 있습니다 각 범주에 대해'announcement_id' 필드를 필드를 설정해야 당신은 당신의 포스트에서했는데, 나는 문제가 보이지 않는다. – meda