【发布时间】:2018-06-21 14:53:49
【问题描述】:
我正在研究一个主键为“Id”的旧数据库。 Eloquent 将主键设置为默认的 'id',因此变化不大,但仍然可能令人困惑。当然我没有注意到这一点,我想将更新的模型保存到数据库中。没有错误,$model->save() 返回很好但是数据库没有更新。此外,我还有其他从数据库中获取模型的函数,它们可以正常工作而不会覆盖$primarykey。
所以这是我的问题:为什么 eloquent 不返回任何警告或错误?当然,我在文档中发现我应该在模型中覆盖$primarykey,然后一切正常。
我使用的是 MySql 10.1.16-MariaDB。 这是 Laravel 控制器
public function update(Request $request, Order $order)
{
$order->fill($request->get('data'));
$order->save();
$order->products;
return $order;
}
Vue.js 函数
editOrder () {
this.fullscreenLoading = true
axios.put('/web/' + this.url + '/' + this.rowId, {'data': this.row})
.then(({data}) => {
this.row = data;
this.fullscreenLoading = false
});
},
Laravel 模型是标准的,当然我的模型现在已经正确更新了,当我遇到这个问题时,没有 $primarykey,我没有提到 $fillable 以及与产品的关系,但在我的项目中它们已定义并正常工作。
class Order extends Model
{
use LogsActivity;
protected $table = 'orders';
protected $primaryKey = 'Id';
protected $fillable = []
}
【问题讨论】:
-
我已经在下面回答了您的问题,但是如果您需要一些特定查询的帮助,请出示代码。
-
如果你保存时没有指定主键,那么 laravel 应该假设“id”是主键。如果您也不包含“id”参数,那么“save”应该在每次保存时创建一个全新的行,并且不会返回任何错误,因为一切正常。这不是正在发生的事情吗,每次保存时都会显示不同的行?
-
@Amarnasan 保存后没有全新的行和数据库根本没有改变
-
除非你以某种方式更改了 PDO::ATTR_ERRMODE 选项,否则如果数据库返回错误,Laravel 会抛出异常。但是,如果您想要更具体的答案,则需要提供更多信息。例如,显示您的代码,提及您正在使用的数据库,显示您如何确定您的语句已运行但数据库未更新...
-
@patricus 我用用于生成此问题的代码编辑了我的问题
标签: laravel vue.js eloquent vuejs2 laravel-5.5