问题描述
我在使用外键时遇到问题。 我有两张桌子。用户表和用户地址表。我会向您展示迁移过程。
用户表:
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();
});
}
我不知道要在控制器/模型/网络路由中添加或插入什么。 :(请帮帮我。
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')
)