• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在数据透视表中插入数据

laravel 来源:Binod Paneru 23次浏览

这两个表tbl_product_managertbl_tags具有多对多关系。我用雄辩来建立相应模型之间的关系。我能够在这两个表中插入数据,但问题是数据透视表没有相应更新。

Controller.php这样:在数据透视表中插入数据

public function addProduct() 
    { 
     $rules = array('product_name' => 'required', 
         'product_url' => 'required'); 
     $validator = Validator::make(Input::all(), $rules); 
     if($validator->fails()){ 
      Session::flash('class', 'alert alert-error'); 
      Session::flash('message', 'Some fields are missing'); 
      return View::make('admin.product.add'); 
     } 
     else { 
      $productName = Input::get('product_name'); 
      $productUrl = Input::get('product_url'); 
      $productUrl = preg_replace('/[^A-Za-z0-9\-]/', '', $productUrl); 
      $productExist = ProductManagementModel::checkExist($productUrl); 
      if(count($productExist)!=0) { 
       $message = 'product <b>'.$productName.'</b> with url <b>'.$productUrl.'</b> is already exist'; 
       Session::flash('class', 'alert alert-error'); 
       Session::flash('message', $message);  
       return View::make('admin.product.add'); 
      } 
      else { 
       $imageFile = Input::file('userfile'); 
       $destinationPath = 'uploads/products/'; 
       $rEFileTypes = "/^\.(jpg|jpeg|gif|png){1}$/i"; 
       $maximum_filesize = 1 * 1024 * 1024; 

       if($imageFile) { 
        $filename = $imageFile->getClientOriginalName(); 
        $extension = strrchr($filename, '.'); 
        $size = $imageFile->getSize();     
        $new_image_name = "products" . "_" . time(); 

        if ($size <= $maximum_filesize && preg_match($rEFileTypes, $extension)) { 
         $attachment = $imageFile->move($destinationPath, $new_image_name.$extension);      
        } else if (preg_match($rEFileTypes, $extension) == false) { 
         Session::flash('class', 'alert alert-error'); 
         Session::flash('message', 'Warning : Invalid Image File!'); 
         return View::make('admin.product_management.add'); 
        } else if ($size > $maximum_filesize) { 
         Session::flash('class', 'alert alert-error'); 
         Session::flash('message', "Warning : The size of the image shouldn't be more than 1MB!"); 
         return View::make('admin.product_management.add'); 
        }    
       } 
       $logo = isset($attachment) ? $new_image_name . $extension : NULL; 

       $objectProduct = new ProductManagementModel; 
       $objectProduct->product_name  = Input::get('product_name'); 
       $objectProduct->product_url   = $productUrl; 
       $objectProduct->category_id   = Input::get('category_id'); 
       $objectProduct->product_cost  = Input::get('product_cost'); 
       $objectProduct->product_short_description = Input::get('product_short_description'); 
       $objectProduct->product_description = Input::get('product_description'); 
       $objectProduct->is_active = Input::get('is_active'); 
       $objectProduct->created_at = Auth::user()->id; 
       $objectProduct->updated_at = Auth::user()->id; 

       if($logo != '') 
       { 
       $objectProduct->product_attachment = $logo; 
       } 
       $objectTags = new TagModel; 
       $objectTags->size_id = Input::get('size_id'); 
       $objectTags->brand_id = Input::get('brand_id'); 
       $objectTags->color_id = Input::get('color_id'); 
       $objectTags->food_id = Input::get('food_id'); 
       $objectTags->save(); 

       //$tag = new TagModel::all(); 

       $objectProduct->save(); 

       if(isset($request->tags)) { 
        $post->Tags()->sync($request->tags, false); 
       } 
       if($objectProduct->id) { 
        Session::flash('class', 'alert alert-success'); 
        Session::flash('message', 'Product successfully added'); 
        return View::make('admin.product_management.add'); 
       } else { 
        Session::flash('class', 'alert alert-error'); 
        Session::flash('message', 'Something error'); 
        return View::make('admin.product_management.add'); 
       }    
      }   
     } 
    } 

ProductManagementModel.php

<?php 

use Illuminate\Auth\UserTrait; 
use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableTrait; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class ProductManagementModel extends Eloquent implements UserInterface, RemindableInterface { 

use UserTrait, RemindableTrait; 
protected $table = 'product_manager'; 

public function Tags(){ 
    return $this->belongsToMany('TagModel', 'product_tag', 'product_id', 'tag_id'); 
} 

public function Categories(){ 
    return $this->hasOne('CategoriesModel', 'id'); 
} 

public static function getAllProducts(){ 
     return $products = ProductManagementModel::with('categories','tags')->get(); 
} 

public static function checkExist($url) 
{  
    return $products = DB::table('product_manager') 
       ->where('is_deleted', 0) 
       ->where('product_url', $url) 
       ->first();    
} 

}

TagModel.php

<?php 
use Illuminate\Auth\UserTrait; 
use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableTrait; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class TagModel extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 
    protected $table = 'tag'; 
    public function ProductManagents() { 
     return $this->belongsToMany('ProductManagentModel'); 
    } 

    public function Color(){ 
     return $this->hasOne('ColorModel', 'color_id'); 
    } 
    public function Brand() { 
     return $this->hasOne('BrandproModel','brand_id'); 
    } 

    public function size() { 
     return $this->hasOne('SizeModel','size_id'); 
    } 

    public function food() { 
     return $this->hasOne('FoodModel','food_id'); 
    } 

} 

在我的研究中,我发现使用同步函数将适用于更新数据透视表。但我没有使用它。 我期待解决这个问题或者找出解决方案的新方法。 在此先感谢。

===========解决方案如下:

看看连接,分离或同步方法: https://laravel.com/docs/5.5/eloquent-relationships#updating-many-to-many-relationships

注意它更容易,如果你尊重雄辩命名约定 http://www.rappasoft.com/articles/laravel-eloquent-naming-convention-guide/


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)