在数据透视表中插入数据

这两个表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/

以上是 在数据透视表中插入数据 的全部内容, 来源链接: utcz.com/qa/263960.html

回到顶部