1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
乍一看,您的表結(jié)構(gòu)的一些問題非常明顯。
您似乎正在嘗試向表中添加一
user_id
列companies
。假設(shè)您的公司有不止一名員工,這不是一個(gè)好主意。如果要使用
NOT NULL
列,最好為每個(gè)列定義一個(gè)默認(rèn)值。
所以我們可以從編寫類似這樣的遷移開始,包括公司/用戶和部門/用戶關(guān)系的數(shù)據(jù)透視表:
// companies
Schema::create('companies', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('contact_email')->default('');
$table->string('contact_phone')->default('');
$table->timestamps();
});
// departments
Schema::create('departments', function (Blueprint $table) {
$table->id();
$table->foreignId('company_id')->constrained()->onDelete('cascade');
$table->string('name');
$table->string('contact_email')->default('');
$table->string('contact_phone')->default('');
$table->timestamps();
});
// users
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('name')->default('');
$table->string('phone')->default('');
$table->integer('user_type')->default(0);
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Schema::create('company_user', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->foreignId('company_id')->constrained()->onDelete('cascade');
});
Schema::create('department_user', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->foreignId('department_id')->constrained()->onDelete('cascade');
});
現(xiàn)在我們有了表之間的鏈接。部門是公司的一部分;一個(gè)用戶可以是多個(gè)部門和/或多個(gè)公司的一部分。這導(dǎo)致以下關(guān)系:
class User extends Model {
// many-to-many
public function companies() {
return $this->belongsToMany(App\Company::class);
}
// many-to-many
public function departments() {
return $this->belongsToMany(App\Department::class);
}
}
class Company extends Model {
public function departments() {
// one-to-many
return $this->hasMany(App\Department::class);
}
public function users() {
// many-to-many
return $this->belongsToMany(App\User::class);
}
}
class Department extends Model {
public function company() {
// one-to-many (inverse)
return $this->belongsTo(App\Company::class);
}
public function users() {
// many-to-many
return $this->belongsToMany(App\User::class);
}
}
現(xiàn)在這樣的代碼應(yīng)該可以工作了:
$user = factory(User::class)->create();
$company = factory(Company::class)->create();
$user->companies()->attach($company);
$company->departments()->create([
'name' => 'Department 1',
'contact_email' => 'department1@example.test',
'contact_phone' => '123456789',
]);
具體來說,該attach方法用于根據(jù)您的原始表格布局更新您似乎沒有定義的多對多關(guān)系。
- 1 回答
- 0 關(guān)注
- 97 瀏覽
添加回答
舉報(bào)