php - Laravel 5.5 - 无法更新对象
问题描述
自从我使用 Laravel 以来已经有一段时间了,我在下面的问题上拉了我的头发,似乎相对直截了当,可能 100% 明显。
我正在向现有视图添加一些新字段,我创建了一个新模型,添加了关系并添加了字段。我可以确认我能够成功查看视图上的数据,我可以成功地从视图中获取数据并在目标表上插入一条新记录。
我遇到的问题是我无法更新现有记录,我可以通过 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();
}
解决方案
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
]);
有关更多信息,请查看此链接。
如果您将使用此方法,则无需检查记录是否存在。这就是优势。
推荐阅读
- azure-active-directory - 为 Azure B2C 用户配置文件中的字段设置默认值
- linux - 如果找到关键字,则在行尾附加文件名的一部分
- laravel - 如何为循环中的每个项目调用多态
- python - 带有 argparsed 的 Python scrapy
- c# - 401 - 禁止:访问被拒绝。IIS
- apache-kafka - 手动刷新 Kafka Connect 接收器?
- java.util.scanner - 使用 Scanner 从同一类的两个对象中获取输入
- javascript - Jquery:添加到动态创建的onclick事件
- 解析 JSON 时单击时出错
- javascript - 精确平移和缩放到 svg 节点
- android - RecyclerView 不适用于片段