繁体   English   中英

Laravel 5.5-无法更新对象

[英]Laravel 5.5 - Unable to update object

自从我使用Laravel以来已经有一段时间了,我正就下面的问题拔头发,这似乎相对简单,而且可能100%显而易见。

我在现有视图中添加了一些新字段,创建了新模型,添加了关系并添加了字段。 我可以确认我能够在View上成功查看数据,我可以从View中成功获取数据并在目标表上插入新记录。

我遇到的问题是我无法更新现有记录,我可以通过ID检索记录,但是不能在其上使用对象选择器($ 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();
}

使用update()方法进行更新,而不是save()。 在插入时使用save()

$license->update();

并获取记录作为单个集合。 如果id不是主键,则通过以下方式

//创建许可证

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

如果id是主键,那么您可以直接获得

$license = License::find($venue->license_id);

您也可以在此处使用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 
 ]);

有关更多信息, 单击此链接。

如果您将使用此方法,则无需检查记录是否存在。 那是优势。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM