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();
}
내 코드는 '아무튼 왜
은 사람이 볼 수 일하는 것 같니?
감사