我正在处理一个旧的数据库,其中primarykey是'Id'。 Eloquent将主键设置为默认的'id',因此它几乎没有变化,但仍然可能令人困惑。当然我没注意到,我想将更新的模型保存到数据库。没有错误,$model->save()
返回很好,但数据库没有更新。此外,我还有其他函数可以从数据库中获取模型,并且它们可以正常工作而不会覆盖$primarykey
。
所以这是我的问题:为什么没有雄辩的回复任何警告或错误?当然我在文档中发现我应该在模型中覆盖$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 Model是标准的,当然我的模型现在已经正确更新了,当我遇到这个问题时没有$primarykey
,我没有提到$fillable
和产品的关系,但是在我的项目中他们被定义了和工作。
class Order extends Model
{
use LogsActivity;
protected $table = 'orders';
protected $primaryKey = 'Id';
protected $fillable = []
}
答案 0 :(得分:1)
如果使用get()
,create()
或类似方法执行查询,它将像以前一样工作,因为在这种情况下Eloquent不使用PK。但是在您在模型中设置find()
属性之前,某些方法(例如$primaryKey
)将无效。
答案 1 :(得分:0)
您没有收到错误,因为没有错误。
当您运行$order->save()
时,生成的查询将类似于:
update `orders` set `field1` = ?, `fieldN` = ?, `updated_at` = ? where `id` is null
这是一个非常有效的SQL语句,当它运行时,它不会产生任何错误。但是,它也不会更新任何记录(除非你有一个id
为空的记录)。
更新查询使用null
的原因是您的订单模型没有id
属性,它具有Id
属性,而PHP数组键区分大小写。因此,当Laravel尝试获取id
属性的值时,它将返回null,并在查询中使用该值。