Laravel 5.5 - Невозможно обновить объект - PullRequest
0 голосов
/ 07 мая 2018

Прошло много времени с тех пор, как я использовал Laravel, и я выдернул свои волосы из-за нижеприведенной проблемы, кажется, относительно прямым и, вероятно, на 100% очевидным.

Я добавляю несколько новых полей в существующее представление, я создал новую модель, добавил отношения и добавил поля. Я могу подтвердить, что могу успешно просматривать данные в представлении, могу успешно извлечь данные из представления и вставить новую запись в целевую таблицу.

У меня проблема в том, что я не могу обновить существующую запись, я могу получить запись по идентификатору, но я не могу использовать селектор объектов ($ object-> data) для нее, я имею добавили функцию и комментарии ниже:

//Create the license
$license = License::where('id', $venue->license_id)->get();
 if(empty($license->id))
  {
    Log::notice("Nothing to show");
  } else {
    //I have added this in as a sanity check, I've been able to 
    //perform Log::notice($license); successfully but the below doesn't work?
    Log::notice($license->id);
    Log::notice($license->license_name);
  }
//This works, I am able to create a new License if there is no ID set.
$license_class_id = $request->get('license_class_id');
$license_type_id = $request->get('license_type_id');
$liquor_license_no = $request->get('liquor_license_no');
$site_reference_no = $request->get('site_reference_no');
$holder_name = $request->get('holder_name');
$license_name = $request->get('license_name');
$trading_name = $request->get('trading_name');

//This works
if( !$license || !$license->exists ) {
    $license = new License;
}

//This is to update the object but it doesn't seem to happen.
$license->license_class_id = $license_class_id;
$license->license_type_id = $license_type_id;
$license->liquor_license_no = $liquor_license_no;
$license->site_reference_no = $site_reference_no;
$license->holder_name = $holder_name;
$license->license_name = $license_name;
$license->trading_name = $trading_name;

if ( ! $license->save() ) {
    return $license->errors();
}

if(!empty($license->id))
 {
   $venue->license_id = $license->id;
    }

if ( ! $venue->save() ) {
  return $venue->errors();
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Здесь также можно использовать метод updateOrCreate.

По этому коду

//Create the license
$license = License::where('id', $venue->license_id)->first();
 if(empty($license))
  {
    Log::notice("Nothing to show");
  } else {
    //I have added this in as a sanity check, I've been able to 
    //perform Log::notice($license); successfully but the below doesn't work?
    Log::notice($license->id);
    Log::notice($license->license_name);
  }
//This works, I am able to create a new License if there is no ID set.
$license_class_id = $request->get('license_class_id');
$license_type_id = $request->get('license_type_id');
$liquor_license_no = $request->get('liquor_license_no');
$site_reference_no = $request->get('site_reference_no');
$holder_name = $request->get('holder_name');
$license_name = $request->get('license_name');
$trading_name = $request->get('trading_name');

License::updateOrCreate([
 'license_class_id' => $license_class_id , 
 'license_type_id' => $license_type_id,
 'license_type_id' => $license_type_id, 
 'license_type_id' => $license_type_id, 
 'holder_name' => $holder_name,
 'license_name' => $license_name,
 'trading_name' => $trading_name 
 ]);

Для получения дополнительной информации проверьте эту ссылку.

Если вы будете использовать этот метод, вам не нужно проверять, существует запись или нет. Это преимущество.

0 голосов
/ 07 мая 2018

использовать метод update () для обновления, а не save (). save () используется во время вставки

$license->update();

И получить запись как одну коллекцию. Если идентификатор не является первичным ключом, то ниже указанным способом

// Создать лицензию

$license = License::where('id', $venue->license_id)->first();

А если id является первичным ключом, то вы напрямую получаете по

$license = License::find($venue->license_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...