почему одна таблица обновляется, а другая не в laravel?

Транзакция в хранимой процедуре MySQL

Чтобы выполнить ROLLBACK в хранимой процедуре MySQL, нам нужно объявить обработчик вывода в хранимой процедуре. Существует два типа обработчиков, которые мы можем иметь в MySQL Хранимая процедура.
  1. sqlexception
  2. sqlwarning

sqlexception будет выполняться при возникновении ошибки во время выполнения запроса, и sqlwarning будет выполняться, когда в MySQL хранится какое-либо предупреждение Процедура. Давайте посмотрим, как мы можем иметь этот блок в Хранимой процедуре.

DELIMITER $$

CREATE PROCEDURE `transaction_sp` ()

BEGIN

DECLARE exit handler for sqlexception
  BEGIN
    -- ERROR
  ROLLBACK;
END;

DECLARE exit handler for sqlwarning
 BEGIN
    -- WARNING
 ROLLBACK;
END;

START TRANSACTION;
  INSERT INTO table_name (id, name, address) values ('1','Avinash','xpertdeveloper.com');
  UPDATE second_table set name="xyz" where id=4;
COMMIT;
END
$$
0
задан tencho 18 January 2019 в 04:35
поделиться

5 ответов

  1. Удалить $user_detail=new Profile;
  2. Использовать отношения для обновления сведений о пользователе.
  3. Читайте о $request->all() и Mass Assignment в Laravel.
  4. Выполните проверку формы в отдельных файлах.
0
ответ дан Danon 18 January 2019 в 04:35
поделиться

удалить строку,

$user_detail=new Profile;

и в строке,

$user_detail = Profile::find($id);

здесь вы не можете сделать это так. Вы должны сделать что-то вроде этого

$user_detail = Profile::where('user_id','=',$id)->first();

, тогда ваш код должен выглядеть так,

public function update(Request $request, $id)
       {
         // $this->validate($request,[
         //     'title'=>'required',
        //     'body'=>'required',
        // ]);
     //$user=new User;
     $user = User::find($id);
     $user->student_no=$request->input('student_no');
     $user->email=$request->input('email');
     $user->save();

    $user_detail = Profile::where('user_id','=',$id)->first();
     $user_detail->student_no=$request->input('student_no');
     $user_detail->profile_pic=$request->input('CID');
      $user_detail->CID=$request->input('CID');
      $user_detail->DOB=$request->input('DOB');
      $user_detail->mobile_no=$request->input('mobile_no');
      $user_detail->joining_year=$request->input('joining_year');
      $user_detail->graduation_year=$request->input('graduation_year');
      $user_detail->program_id=$request->input('programe_id');
      $user_detail->work_experience=$request->input('work_experience');
      $user_detail->save();

     return redirect('/dashboard')->with('success','Post Updated');
0
ответ дан dilusha_dasanayaka 18 January 2019 в 04:35
поделиться

Вы должны удалить строку $user_detail=new Profile; и обновить строку $user_detail = Profile::find($id); следующим образом

$user_detail = Profile::where('user_id',$id)->first()
0
ответ дан Nayeem Azad 18 January 2019 в 04:35
поделиться

Есть две три вещи с вашим запросом.

$user_detail=new Profile;
$user_detail = Profile::find($id);

прежде всего не нужно новый профиль линия. Он только что создал новый объект, но вам не нужно это, так как вы собираетесь обновить профиль кого-то, теперь напечатайте ваш ответ второй строки, если вы получаете какой-либо ответ от него, а также он правильный, потому что ваш идентификатор поиска не user_id. в противном случае с этим проблем нет. надеюсь, вы найдете решение в этом.

0
ответ дан Gaurav Gupta 18 January 2019 в 04:35
поделиться

$ user_detail = Profile :: find ($ id); в этой строке вы проверяете данные профиля с помощью первичного ключа таблицы профилей, который может не существовать

Вы можете попробовать с помощью

$user_detail = Profile::where('user_id',$id)->first();

user_id is the fk on profiles table from user id.
0
ответ дан PHP Geek 18 January 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: