我有用户,用户属于经销商。
用户注册后,我尝试保存新用户和新经销商。
用户数据库有一个dealership_id
列,我想用新创建的经销商的ID填充该列。
这是我UserController
存储方法中的当前代码。
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";
}
尝试使用$user->push();
用户数据会更新,但不会创建或更新经销商。
答案 0 :(得分:53)
Eloquent的push()
保存了模型及其关系,但首先你必须告诉你想要参与关系的内容。
由于您的用户模型/表包含经销商的ID,我认为用户只能属于一个经销商,因此关系应如下所示:
用户模型:
public function dealership()
{
return $this->belongsTo('Dealership');
}
经销商型号:
public function users()
{
return $this->hasMany('User');
}
要从经销商角度保存用户,请执行以下操作:
$dealership->users()->save($user);
要将经销商与用户相关联,请执行以下操作:
$user->dealership()->associate($dealership);
$user->save();
答案 1 :(得分:6)
请检查this answer以查看push()和save()
的区别您需要正确定义模型relationships as per documentation 如果这是正确的,它应该工作。 这就是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;
}
在您的情况下,您有一个(经销商)属于许多(用户)
在您的用户模型中:
class Users extends Eloquent {
public function dealership()
{
return $this->belongsTo('Dealership');
}
}
在上面的示例中,Eloquent将在users表中查找dealership_id列。 在您的经销商模型中:
class Dealership extends Eloquent {
public function users()
{
return $this->hasMany('User');
}
}
在您的商店功能中:
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";
}
在此了解有关eloquent relationships
的更多信息答案 2 :(得分:1)
通过在User模型上使用push,Laravel基本上是递归地调用所有相关模型上的save(在这种情况下,没有,因为你还没有将任何其他模型与它相关联)。
因此,为了完成您尝试做的事情,您可以先创建用户,然后通过执行以下操作将经销商与之关联起来:
$user = new User();
$user->email = Input::get('email');
$user->password = Input::get('password');
$user->save();
$dealership = new Dealership();
$dealership->name = Input::get('dealership_name');
$user->dealerships()->save($dealership);
return "User Saved";
但是,在此之前,您必须确保您的用户和经销商模型的关系设置正确:
用户模型:
public function dealership()
{
return $this->belongsTo('Dealership');
}
经销商模式:
public function users()
{
return $this->hasMany('User');
}
答案 3 :(得分:0)
这就是我设法做到的方式。
在您的控制器中:(Laravel 5)
use Auth;
$dealership->user = Auth::user()->ref_user->staff_id;