保存没有可空关系的模型

时间:2016-06-28 08:27:35

标签: php mysql laravel eloquent relationship

考虑以下两种关系:

用户:

CREATE TABLE user (
id INT NOT NULL,
social_provider_id INT NOT NULL,
CONSTRAINT `user_social_provider_id_fk` FOREIGN KEY (`social_provider_id`)
REFERENCES `social_provider` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
)

社交提供者:

CREATE TABLE social_provider (
id INT NOT NULL,
name VARCHAR NOT NULL )

雄辩的模特:

class User extends Model{
    protected $table = 'user';
    public function socialProvider(){
         return $this->hasOne('/SocialProvider');
    }
}

现在我想创建一个新的User对象并保存它:

$user = new User();
$socialProvider = SocialProvider::find(1);
$user->socialProvider()->save($socialProvider);
$user->save();

但是我在分配SocialProvder对象

的行上得到了这个例外
Call to undefined method Illuminate\Database\Query\Builder::save()

我首先尝试保存User对象然后分配关系,但显然这是不可能的,因为NOT NULL表的定义中存在user约束。

我目前的解决方法是以这种方式分配关系:

$user->social_provider_id = $socialProvider->id;

但我想使用Eloquent的功能。 如何保存一个不可为空的关系的新模型,而不必自己分配ID?

解决方案: 与@Panagiotis Koursaris建议的一样,解决方案是使用associate()代替save()

2 个答案:

答案 0 :(得分:1)

试试这个:

$config = $serviceManager->get('config');
$hostName = $config['hostname'];

答案 1 :(得分:0)

ShoppingCart模型中,执行此操作

User