我试图在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');
}
}
答案 0 :(得分:2)
您可以这样称呼它:
$provider->user()->save($user);