#laravel #relationship
Вопрос:
Я работаю над проектом Laravel с поддоменами. Каждая новая компания получает свой собственный поддомен. Каждый клиент, созданный внутри компании, должен получить один и тот же поддомен.
Поскольку возможно, что поддомен со временем изменится, я использую таблицу поддоменов.
Итак , у меня есть три таблицы и модели: Subdomain
, Company
и Client
и следующие правила:
- Поддомен может иметь несколько организаций (Компания или Клиент).
- У компании может быть один поддомен
- У клиента может быть один поддомен
Поэтому я использую полиморфное отношение «Один ко многим».
миграция create_subdomains_table
Schema::create('subdomains', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->morphs('organisation');
$table->timestamps();
});
миграция create_companies_table
Schema::create('companies', function (Blueprint $table) {
$table->id();
$table->string('enterprise_number')->unique();
$table->string('legal_entity_type');
$table->string('business_name');
$table->string('phone');
$table->string('email');
$table->json('ancestry')->nullable();
$table->bigInteger('subdomain_id')->unsigned()->nullable();
$table->foreign('subdomain_id')->references('id')->on('subdomains');
$table->timestamps();
});
Модель компании
public function subdomain() {
return $this->morphOne(Subdomain::class, 'organisation');
}
Модель поддомена
public function organisation() {
return $this->morphTo();
}
Создать функцию контроллера компании
// Create subdomain
$subdomain = Subdomain::create([
'name' => Str::slug($validatedData['business_name'], '-')
]);
// Create company
$company = Company::create([
'enterprise_number' => $validatedData['enterprise_number'],
'legal_entity_type' => $validatedData['legal_entity_type'],
'business_name' => $validatedData['business_name'],
'phone' => $validatedData['phone'],
'email' => $validatedData['email'],
]);
// Create relationship between company and subdomain
$company->subdomain()->save($subdomain);
Это приводит к ошибке Not null violation: 7 ERROR: null value in column "organisation_type" of relation "subdomains" violates not-null constraint
Хотя я нашел $table->morphs('organisation');
в документации Laravel, я изменил ее на
$table->bigInteger('organisation_id')->unsigned()->nullable();
$table->string('organisation_type')->nullable();
Это работает для создания записи поддомена и компании, но subdomain_id
столбец в таблице компаний равен НУЛЮ.
Что я сделал не так?
Комментарии:
1. проблема в ваших ключевых соглашениях
Ответ №1:
‘номер предприятия’ => должен ли идентификатор модели, например: > 1
,
‘legal_entity_type’ => должно ли пространство имен модели, например: > 'AppModelsModelName'
,