保存Laravel 4中的一对一多态关系


Saving a One to One Polymorphic relation in Laravel 4

我在用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