微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel:如何使用外键插入数据

如何解决Laravel:如何使用外键插入数据

我在使用外键时遇到问题。 我有两张桌子。用户表和用户地址表。我会向您展示迁移过程。

用户表:

public function up()
    {
        Schema::create('users',function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('username')->unique()->nullable();
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

这是 user_address 表:

public function up()
    {
        Schema::create('user_address',function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->integer('mobile_no')->nullable();
            $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
            $table->string('address')->nullable();
            $table->string('street')->nullable();
            $table->string('city')->nullable();
            $table->string('state')->nullable();
            $table->timestamps();
        });
    }

我不知道要在控制器/模型/网络路由中添加或插入什么。 :(请帮帮我。

我有用户模型和 user_address 用户模型:

class User extends Authenticatable
{
    use HasFactory,Notifiable;
    protected $fillable = [
        'name','username','email','password','role_name',];

    protected $hidden = [
        'password','remember_token',];

    protected $casts = [
        'email_verified_at' => 'datetime',];

    public function setUsernameAttribute($value) {
        if ( empty($value) ) {
        $this->attributes['username'] = NULL;
        } else {
            $this->attributes['username'] = $value;
        }
    }

和 user_address 表:

class User_Address extends Model
{
    use HasFactory;

    protected $fillable = [
        'mobile_no','shipping_address','barangay','city','province',];
}

解决方法

也许试试这样的:

$user_post=request()->get('name','username','email');
$address_post=request()->get('street','city','address')

$user = new User();
$user -> fill($user_post];
$user->save();


$id=$user->id;

$address_post['user_id']=$id;
$address = new UserAdress();
$address -> fill($user_address);
$address -> save();

我现在不记得应该是fill()还是insert()。

,

我建议首先在 User 模型中创建一个关系

public function address() {
    return $this->hasOne(Addres::class,'user_id);
}

你可能可以通过这样做而逃脱

tap(
   User::create(request()->get('name','email')),fn($user)=> $user->address()
             ->save(request()->get('street','address')
)

或者没有关系,你将不得不做类似的事情

tap(
   User::create(request()->get('name',fn($user)=> Address::create[array_merge(
             ['user_id' => $user->id],request()->get('street','address')
           )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。