2016-11-24 1 views
0

API를 통해 제품이 업데이트되는 쿼리를 작성하려고합니다. 응용 프로그램은 NodeJS 레이어에 싸인 각도 2로 작성됩니다.Laravel Eloquent relationship query not working

제품에는 파일과 다 대다 관계가 있습니다. 내가 원하는 것은 데이터를 API로 보내 파일을 갱신 할 때 Eloquent 질의는이 관계가 이미 존재하는지 검사하고 그렇지 않으면 'file_product'테이블에 관계를 추가한다는 것입니다. 이 기능을 범주 다 대 다 관계로 잘 작동하지만 어떤 이유로이 관계는 파일 관계에서 작동하지 않습니다. 여기에 내 코드 :

제품 컨트롤러 업데이트 기능 :

public function update(Request $request, $id) 
    { 
     if($id && is_numeric($id)) { 
      try { 
       $requestProductVars = $request->get('product'); 
       $product = Product::find($id); 
       $product->title = $requestProductVars['title']; 
       $product->description = $requestProductVars['description']; 
       $product->images = json_encode($requestProductVars['images']); 
       $product->SKU = $requestProductVars['SKU']; 
       $product->manufacturer_id = $requestProductVars['manufacturer_id']; 
       $product->active = (($requestProductVars['active'] === true) ? '1' : '0'); 
       if($request->get('categories')) { 
        $categories = $request->get('categories'); 
        foreach($categories as $categoryId) { 
         $category = Category::find($categoryId); 
         if(!$product->categories->contains($category)) { 
          $product->categories()->save($category); 
         } 
        } 
       } 
       if(count($requestProductVars['files'])) { 
        $files = $requestProductVars['files']; 
        foreach($files as $file) { 
         $fileId = $file['id']; 
         $fileRecord = File::find($fileId); 
         if(!$product->files->contains($fileRecord)) { 
          $product->files()->save($fileRecord); 
         } 

        } 
       } 
       $product->save(); 

당신이 볼 수 있듯이, 내가 요청에 '파일'속성이 있는지 확인하고 난 루프는 각각의 파일을 통해이있는 경우 id를 가져 와서 관계가 있는지 확인하십시오 :

if(!$product->files->contains($fileRecord)) { 

files 속성은 File 객체의 배열을 포함합니다.

내 코드가 여기에서 멈추는 것처럼 보이고 실행되지 않는 것 같습니다. 카테고리 기능은이 코드에서 잘 작동하지만, 이상하게도 똑같은 일을합니다.

나는 제품과 파일 및 다 대다 관계에 대한 모델을 확인 미세 여기에 정의되어 있습니다

Product.php 

/** 
    * Returns all files associated with a product 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 
    */ 
    public function files() { 
     return $this->belongsToMany('App\File')->withTimestamps(); 
    } 

File.php

/** 
    * Returns all products related to a file 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 
    */ 
    public function products() { 
     return $this->belongsToMany('App\Product')->withTimestamps(); 
    } 
내 코드는 '아무튼 왜

은 사람이 볼 수 일하는 것 같니?

감사

답변

0

좋아, 나는 문제가 무엇인지 발견했다.

파일을 제품 기능으로 추상화하기 전에 제품 테이블에 '파일'이라는 셀이있었습니다. 이 셀을 삭제하는 것을 잊어 버렸고 파일 관계를 쿼리하려고 할 때 충돌이 발생했습니다. 희망이 사람을 미래에 도움이됩니다.