2016-11-24 45 views
0

我试图建立一个产品通过API更新的查询。该应用程序构建在包装在NodeJS图层中的Angular2中。Laravel雄辩的关系查询不起作用

产品与文件存在多对多关系。我想要发生的事情是,当数据发送到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(); 
    } 

任何人都可以明白为什么我的代码没有按” t似乎在工作?

感谢

回答

0

好吧,我发现了什么问题。

在我将文件提取到产品功能之前,我在产品表中有一个名为'files'的单元。我忘了删除这个单元格,当我试图查询文件关系时,这导致冲突。希望这有助于未来的人。