Laravel雄辩的关系查询不起作用
问题描述:
我试图建立一个产品通过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似乎在工作?
感谢
答
好吧,我发现了什么问题。
在我将文件提取到产品功能之前,我在产品表中有一个名为'files'的单元。我忘了删除这个单元格,当我试图查询文件关系时,这导致冲突。希望这有助于未来的人。