【问题标题】:Laravel 5.2 Eloquent createLaravel 5.2 Eloquent 创建
【发布时间】:2016-11-04 02:26:49
【问题描述】:

我有两张桌子:

用户:

id、用户名、密码

客户:

id、user_id、全名、地址

在我的 CustomerController.php 中,store() 函数 我需要先创建用户,然后使用 user_id 创建客户。

Customer::create($request->all());

正在插入客户数据但没有 user_id

是否可以使用 Eloquent 同时添加用户和客户?

我的用户模型是:

class User extends Authenticatable{
    public function customers(){
        return $this->hasMany('App\Customer', 'user_id');
    }
}

客户模型

class Customer extends Model {
    public function user(){
        return $this->belongsTo('App\User');
    }
}

【问题讨论】:

  • 您需要将您的操作包装在网关模式(也称为服务模式,但与 Laravel 服务提供者的概念不同)中。
  • 是的,我们都想偷懒! :) 只写$customer->save() 并期望新用户与客户数据一起保存。

标签: laravel-5 eloquent


【解决方案1】:

将其包装在事务中,以确保两者都保存或都不保存。

DB::transaction(function () {
    $customer = new Customer($request->only(['fullname', 'address']));
    $user = User::create($request->only(['username', 'password']));
    $user->customers()->save($customer);
});

【讨论】:

  • Pawel:这工作正常。 (Y) 只需要更改 DB::transaction(function () use ($request){ 。但是,这不是 Eloquent 的方式,对吧?
  • documentation 有一个保存相关对象的示例,但它使用 find 而不是创建父对象。交易只是确保您保存两者或不保存以防出现问题。您可以覆盖保存方法,但我认为这很简单。
【解决方案2】:

您可以挂钩模型的创建/创建事件,然后执行一些先决操作。这对于创建相关模型和事先配置任何内容非常有用。在此处查看有关模型事件的文档:

https://laravel.com/docs/5.4/eloquent#events

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2016-12-20
    • 2017-02-21
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多