【发布时间】:2021-09-06 10:59:08
【问题描述】:
我在使用外键时遇到问题。 我有两张桌子。用户表和用户地址表。我将向您展示迁移过程。
用户表:
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_address是数据透视表吗(即多个用户可以拥有相同的地址吗?)我们需要更多信息来帮助您。 -
我有用户和用户地址的模型。但只有受保护的可填充
-
完美;好多了。所以现在你可能应该在
User和UserAddress之间建立一个关系(注意:类名中不应该有_)。在这种情况下,一个User可以有许多UserAddress记录:laravel.com/docs/8.x/eloquent-relationships#one-to-many。然后您需要添加逻辑来创建或更新 UserAddress($user->addresses()->create(...);或$user->addresses()->where(...)->first()->update(...));等)
标签: php database laravel foreign-keys