我在用Laravel 4保存多态一对一关系时遇到了一些麻烦,这是我的模型:
namespace App'Models'Proveedores;
class Proveedor extends 'Eloquent {
public function proveedorable () {
return $this->morphTo('proveedorable', 'proveedorable_type', 'proveedorable_id');
}
这就是具体的型号:
namespace App'Models'Proveedores;
class ProveedorTerminacion extends 'Eloquent {
public function proveedor () {
return $this->morphOne ('App'Models'Proveedores'Proveedor', 'proveedorable', 'proveedorable_type', 'proveedorable_id');
}
通过这种方式,我试图保存与特定ProveedorTerminacion
模型相关联的Proveedor
,但由于某种原因,在我的表中为ProveedorTerminacion
创建了一行,但没有为Proveedor
创建,Laravel不会显示任何错误并返回空响应,怎么了?
$terminador = ProveedorTerminacion::create (Input::all());
$proveedor = new Proveedor;
$proveedor->fill (Input::all());
$proveedor->proveedorable()->associate ($terminador);
$proveedor->save ();
Associate方法无法正确使用morphTo,因为它从未设置morphable_type,所以不要使用它。顺便说一句,我很确定您的代码应该因此而抛出致命错误。它需要进行错误修复。
相反,反转创建关系,并在可变形对象的上下文中进行:
$terminador = ProveedorTerminacion::create (Input::all());
$proveedor = new Proveedor;
$proveedor->fill (Input::all());
$terminador->proveedor()->save($proveedor);
我正在解决这个问题,并将在一些测试后向laravel回购发送一份PR。完成后我会更新我的答案。
它在这里:https://github.com/laravel/framework/pull/4249