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

Joa*_*les 2 php laravel eloquent laravel-4

我在与Laravel 4保存多态一对一关系时遇到了一些麻烦,这是我的模型:

namespace App\Models\Proveedores;

class Proveedor extends \Eloquent {

public function proveedorable () {
    return $this->morphTo('proveedorable', 'proveedorable_type', 'proveedorable_id');
}
Run Code Online (Sandbox Code Playgroud)

这是具体的模型:

namespace App\Models\Proveedores;

class ProveedorTerminacion extends \Eloquent {

public function proveedor () {
    return $this->morphOne ('App\Models\Proveedores\Proveedor', 'proveedorable', 'proveedorable_type', 'proveedorable_id');
}
Run Code Online (Sandbox Code Playgroud)

这种方式我试图保存Proveedor与特定ProveedorTerminacion模型相关联,但由于某种原因,ProveedorTerminacion在我的表中创建了一行,但不是为了Proveedor和Laravel不会显示任何错误并返回空响应,这有什么问题?

$terminador = ProveedorTerminacion::create (Input::all());

$proveedor = new Proveedor;
$proveedor->fill (Input::all());

$proveedor->proveedorable()->associate ($terminador);

$proveedor->save ();
Run Code Online (Sandbox Code Playgroud)

Jar*_*zyk 12

关联方法与morphTo无法正常工作,因为它永远不会设置morphable_type,所以不要使用它.顺便说一句,我很确定你的代码应该抛出致命的错误.它需要bugfix.

而是反转创建关系并在可变形对象的上下文中执行:

$terminador = ProveedorTerminacion::create (Input::all());

$proveedor = new Proveedor;
$proveedor->fill (Input::all());

$terminador->proveedor()->save($proveedor);
Run Code Online (Sandbox Code Playgroud)

经过一些测试后,我正在解决这个问题,然后将一个PR发送到laravel repo.完成后我会更新我的答案.

这是:https://github.com/laravel/framework/pull/4249