Я работаю над проектом хобби (Управление магазином) с Laravel. Я пытаюсь использовать DB :: beginTransaction() и DB :: rollback(), но он не работает. Согласно моему коду, я считаю, что никакие записи не должны были заполняться в БД.Я не могу использовать транзакции в Laravel
У меня уже есть возможности для поиска, но не найдено ни одного решения. И мои таблицы MySQL - это InnoDB
Вот мой файл контроллера магазина.
class shopController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function getView()
{
if(Auth::user()->shop_status==0)
return View::make('shop')->with('name',json_encode(Auth::user()->Vendor_Detail()->get(['first_name', 'last_name'])));
else
return redirect('/home');
}
public function addShop(ShopDataRequest $request){
//get the logged in vendor's model instance. Auth uses Vendor model
$vendor = Auth::user();
//create new Shop Model
$shop = new Shop;
$shop->name = $request['shop_name'];
$shop->address = $request->addressLine1;
$shop->pincode = $request->pincode;
$shop->phone = $request->phone;
$shop->shop_type = $request->shop_type;
DB::beginTransaction();
try{
//save shop details
$vendor->Shops()->save($shop);
//throw custom Exception
throw new \Exception('User not created for account');
}
catch (Exception $e){
//catch exception and rollback
DB::rollback();
}
}
}
Модели:
1) Магазин:
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Shop extends Authenticatable
{
protected $connection = 'vendor';
protected $fillable = [
'shop_id','vendor_id','name','address','pincode','phone','shop_type'
];
public function Vendor(){
return $this->belongsTo('App\Models\Vendor','vendor_id','vendor_id');
}
public function Products(){
return $this->belongsToMany('App\Models\Product')->withPivot('mfg_date', 'exp_date','active','quantity');
}
}
2) Производитель
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Vendor extends Authenticatable
{
protected $connection = 'vendor';
protected $primaryKey = 'vendor_id';
protected $fillable = [
'email','phone','password',
];
protected $hidden = [
'password', 'remember_token',
];
public function Vendor_Detail(){
return $this->hasOne('App\Models\Vendor_Detail','vendor_id','vendor_id');
}
public function Shops(){
return $this->hasMany('App\Models\Shop','vendor_id','vendor_id');
}
public function Documents(){
return $this->hasMany('App\Models\Vendor_document','vendor_id','vendor_id');
}
}
MySQL таблиц данные, показывающие DB двигатель.
mysql> ПОКАЗАТЬ ТАБЛИЧНОЕ СТАТУС ГДЕ
Name
= 'магазины'; + ------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ----------------- + - ------------ + ----------- + ---------------- + -------- ------------- + ------------- + ------------ + --------- -------- + ---------- + ---------------- + --------- + | Наименование | Двигатель | Версия | Row_format | Строки | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Обновить_time | Check_time | Сортировка | Контрольная сумма | Create_options | Комментарий | + ------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ----------------- + - ------------ + ----------- + ---------------- + -------- ------------- + ------------- + ------------ + --------- -------- + ---------- + ---------------- + --------- + | магазины | InnoDB | 10 | Компактный | 1 | 16384 |
16384 | 0 | 16384 | 0 | 17 | 2016-07-03 04:56:27 | NULL | NULL | utf8_general_ci |
NULL | | | + ------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ----------------- + - ------------ + ----------- + ---------------- + -------- ------------- + ------------- + ------------ + --------- -------- + ---------- + ---------------- + --------- + 1 строка в set (0.00 сек)mysql> ПОКАЗАТЬ ТАБЛИЧНОЕ СТАТУС ГДЕ
Name
= 'vendors'; + --------- + -------- + --------- + ------------ + ------ + ---------------- + ------------- + ----------------- + -------------- + ----------- + ---------------- + ------ --------------- + ------------- + ------------ + ------- ---------- + ---------- + ---------------- + --------- + | Наименование | Двигатель | Версия | Row_format | Строки | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Обновить_time | Check_time | Сортировка | Контрольная сумма | Create_options | Комментарий | + --------- + -------- + --------- + ------------ + ------ + ---------------- + ------------- + ----------------- + -------------- + ----------- + ---------------- + ------ --------------- + ------------- + ------------ + ------- ---------- + ---------- + ---------------- + --------- + | продавцы | InnoDB | 10 | Компактный | 1 | 16384 |
16384 | 0 | 0 | 0 | 6 | 2016-07-07 00:46:08 | NULL | NULL | utf8_general_ci |
NULL | | | + --------- + -------- + --------- + ------------ + ------ + ---------------- + ------------- + ----------------- + -------------- + ----------- + ---------------- + ------ --------------- + ------------- + ------------ + ------- ---------- + ---------- + ---------------- + --------- + 1 ряд в комплекте (0,00 с)
Просьба помочь.
Нужно ли использовать фиксацию даже после откат()? – jaysingkar
Я попытался использовать commit(). Тем не менее то же самое :-( – jaysingkar
Вам нужно использовать после сохранения. Перед вызовом throw – LONGMAN