一次创建新记录和关系

时间:2014-04-20 14:10:11

标签: php laravel eloquent

我有以下基本架构:

玩家

id
name

简档

id
player_id
email

子集

id
profile_id
alias

我认为在创建新记录时可以进行以下操作:

Player::create([
    'name' => 'Player 1',
    'profile.email' => 'player1@email.com',
    'profile.subset.alias' => 'Player 1 alias'
]);

由于此代码似乎不起作用,无论如何都要将关系记录与create方法一起保存?

1 个答案:

答案 0 :(得分:1)

基本上,你不能像看起来那样容易。

在文档中,所有相关模型都是在创建基本模型后创建的

$profile = new Profile(array('email' => 'player1@email.com','alias'=>'Player 1 alias'));

$player = new Player(array('name'=>'Player 1'));

$player = $post->profile()->save($profile);

但是,如果你真的想一次性完成,你可以覆盖播放器模型中的save()方法:

public function save(){
        Database::transaction(function() {
                    $profileModel = new Profile($this->profile);

                    parent::save();

                    $this->profile()->insert($profileModel);

                });
}

然后,您将数组传递给Player方法,如:

array(
name='Player name',
profile=>array(
         email=>'player1@email.com',
         subset=>array(
           alias=>'Player 1 alias'
          )
);

虽然这不是推荐的行动。

请阅读有关如何保存Eloquent模型和关系的更多信息:

Tutorial 1 Tutorial 2

建议首先创建基本模型,然后是相关模型。