Laravel Eloquent关系查询不起作用

时间:2016-11-24 10:31:42

标签: node.js laravel angular eloquent

我正在尝试构建一个通过API更新产品的查询。该应用程序是在Angular2中构建的,包含在NodeJS层中。

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

正如您所看到的,我检查请求是否有'files'属性,如果有循环遍历每个文件,请获取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();
    }

任何人都可以看到我的代码似乎无法正常工作的原因吗?

由于

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题所在。

在我将文件抽象到产品功能之前,我在产品表中有一个名为'files'的单元格。我忘记删除此单元格,这在我尝试查询文件关系时导致冲突。希望这可以帮助将来的某个人。

相关问题