Laravel 8 - 在模型中插入相关 table

Laravel 8 - Insert in related table in model

每当我创建一个“用户”时,我都必须在不同的表(如帐户)中创建一行。 我知道在控制器中我可以像这样创建用户和帐户:

$user = User::create($user_inputs);
$account = $user->account()->create($account_inputs);
$OtherTables...

有没有办法在模型中做到这一点?总是当有人从另一个控制器创建用户时,这些行会自动插入到其他表中。还是每次都需要在controller中注明?

您可以为此使用模型事件。 https://laravel.com/docs/9.x/eloquent#events-using-closures

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
    /**
     * The "booted" method of the model.
     *
     * @return void
     */
    protected static function booted()
    {
        // This code will be called every time a new user is inserted into the system
        static::created(function ($user) {
            $user->account()->create([ 'name' => $user->name ])
        });
    }
}

您可以在启动方法中使用更多的事件,名称清楚地说明了它们的作用。

creating
created
updating
updated
saving
saved
deleting
deleted

您可以使用Laravel observer

 <?php

namespace App\Observers;

use App\Models\User;

class UserObserver
{
    /**
     * Handle the user "created" event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function creating(User $user)
    {
        $user->account()->create([
            // your data 
        ]);
    }
  }