Laravel 4:保存多态关系

时间:2014-12-17 00:53:44

标签: php laravel-4

我试图在laravel中保存多态关系并且无法使其工作。如果我Call to undefined method Illuminate\Database\Query\Builder::save()

,我会收到此错误:$user->provider()->save($provider)

或者我得到了

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'userable_type' in 'field list' (SQL: insert into 'providers' ('user_id', 'userable_type', 'userable_id') values (16, Provider, 16))

如果我按照Call to undefined Builder::save() when saving a polymorphic relationship

中的建议切换它并按$provider->user()->save($provider);进行操作

从我在多态关系上找到的小文档来看,似乎userable_type / id的东西都在父表中,并且因为User是我的父表而不是Provider,所以第二种方法似乎是错误的做法它

我猜测问题是我的morphTo / morphOne方法,但我不知道如何修复它们,因为这些方法的文档对它们的参数没什么好说的。我的提供者表可能与laravel期望的设置略有不同,因为它没有增量id字段作为主键;主键外键,名为user_id。

这是我的注册码:

public function postRegister()
{
    $input = Input::all();
    $user = $this->user;
    $validator = Validator::make($input, $user::$rules);

    if($validator->passes())
    {
        $user->username = $input['username'];
        $user->email = $input['email'];
        $user->password = Hash::make($input['password']);
        $user->save();

        if($input['account_type'] == 0)
        {
            $provider = new Provider();
            $provider->user_id = $user->id;

            //$provider->user()->save($provider);
            $user->provider()->save($provider);
        }

        return 'Success';
    }
    else
    {
        return Redirect::back()->withInput($input)->withErrors($validator->messages());
    }
}

用户模型:

<?php

class User extends Validatable implements UserInterface, RemindableInterface
{
    use UserTrait, RemindableTrait;

    protected $table = 'users';

    public function userable()
    {
        return $this->morphTo();
    }
}

提供者模型:

<?php

class Provider extends Validatable
{
    protected $table = 'providers';
    protected $primaryKey = 'user_id';

    public $timestamps = false;

    public function user()
    {
        return $this->morphOne('User', 'userable');
    }
}

1 个答案:

答案 0 :(得分:2)

您可以这样称呼它:

$provider->user()->save($user);