在laravel中保存相关记录

Bea*_*ary 42 one-to-many laravel eloquent laravel-4

我有用户,用户属于经销商.

在用户注册后,我正在尝试保存新用户和新经销商.

用户数据库有一dealership_id列,我想用新创建的经销商的ID填充该列.

这是我在UserControllerstore方法中的当前代码.

public function store()
{
    $user = new User();
    $user->email = Input::get('email');
    $user->password = Input::get('password');


    $dealership = new Dealership();
    $dealership->name = Input::get('dealership_name');

    $user->push();
    return "User Saved";

}
Run Code Online (Sandbox Code Playgroud)

尝试使用$user->push();用户数据会更新,但不会创建或更新经销商.

Qua*_*unk 58

Eloquent push()拯救了模型及其关系,但首先你必须告诉你想要参与关系的内容.

由于您的用户模型/表包含经销商的ID,我假设用户只能属于一个经销商,因此关系应如下所示:

用户模型:

public function dealership()
{
  return $this->belongsTo('Dealership');
}
Run Code Online (Sandbox Code Playgroud)

经销商型号:

public function users()
{
  return $this->hasMany('User');
}
Run Code Online (Sandbox Code Playgroud)

要从经销商角度保存用户,请执行以下操作:

$dealership->users()->save($user);
Run Code Online (Sandbox Code Playgroud)

要将经销商与用户相关联,请执行以下操作:

$user->dealership()->associate($dealership);
$user->save();
Run Code Online (Sandbox Code Playgroud)

  • 在答案发布6个月后,默默无声地低估了原因?是的,方式去,随机陌生人! (3认同)
  • @SteveBalistreri我想你必须在关联之前首先"保存()"新的经销商:)"新的经销商()`创建一个对象,但是还没有保存它,所以它没有ID.您必须手动调用save-method.或者你可以用`create()`:`Dealership :: create(array('name'=> Input :: get('dealership_name')));`这会自动保存新创建的对象,因此它有一个ID与...联系. (2认同)

小智 7

请检查此答案 以查看push()和save()的区别

您需要根据文档正确定义模型关系 如果这样做正确,它应该可以工作.这就是push()的作用:

/**
 * Save the model and all of its relationships.
 *
 * @return bool
 */

    public function push()
    {
        if ( ! $this->save()) return false;

        // To sync all of the relationships to the database, we will simply spin through
        // the relationships and save each model via this "push" method, which allows
        // us to recurse into all of these nested relations for the model instance.

        foreach ($this->relations as $models)
        {
            foreach (Collection::make($models) as $model)
            {
                if ( ! $model->push()) return false;
            }
        }

        return true;
    }
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您有一个(经销商)属于许多(用户)

在您的用户模型中:

class Users extends Eloquent {

    public function dealership()
    {
        return $this->belongsTo('Dealership');

    }

}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,Eloquent将在users表中查找dealership_id列.在您的经销商模型中:

class Dealership extends Eloquent {

    public function users()
    {
        return $this->hasMany('User');
    }

}
Run Code Online (Sandbox Code Playgroud)

在您的商店功能:

 public function store()
    {
        $user = new User();
        $user->email = Input::get('email');
        $user->password = Input::get('password');


        $user->dealership = new Dealership();
        $user->dealership->name = Input::get('dealership_name');

        $user->push();
        return "User Saved";

    }  
Run Code Online (Sandbox Code Playgroud)

在这里学习更多关于雄辩关系的知识

另请在这里查看我的答案