Я создаю элементарное приложение CRM, используя Laravel 6.0. Пользователи могут свободно создавать учетные записи, но чтобы получить какую-либо функциональность из приложения, им необходимо настроить SubscriptionAccount (или присоединиться к существующему), который затем позволит им создавать / управлять учетными записями клиентов, добавлять пользователей и т. Д. (Каждый из них). это один ко многим).
Отношения модели пользователя с моделью SubscriptionAccount вызывают у меня проблемы. Например:
$user = User::find(1);
$user->subscription()->create(['name' => 'Test Subscription']);
$user = $user->fresh();
dd($user->subscription); // returns null
Я подозревал, что это связано с отношением belongsTo
в модели User, но странным является то, что он фактически создает и сохраняет новый SubscriptionAccount при использовании этого отношения (вторая строкавыше), хотя, если вы получаете доступ к users
отношению из нового SubscriptionAccount, он также возвращает ноль.
Вот модели:
// User.php
class User
{
public function subscription()
{
return $this->belongsTo(SubscriptionAccount::class, 'subscription_account_id');
}
}
// SubscriptionAccount.php
class SubscriptionAccount extends Model
{
public function users()
{
return $this->hasMany(User::class, 'subscription_account_id');
}
}
Единственное, что необычно, - это сокращениеимя отношения с subscription
из SubscriptionAccount
, но об этом нужно было позаботиться, указав внешний ключ в обоих отношениях. Вот миграции:
Schema::create('subscription_accounts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->uuid('uuid')->unique();
$table->string('name');
$table->timestamps();
});
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->uuid('uuid')->unique();
$table->bigInteger('subscription_account_id')->unsigned()->index()->nullable();
$table->string('name');
...
$table->timestamps();
$table->foreign('subscription_account_id')
->references('id')
->on('subscription_accounts');
});
Если я создаю пользователя из SubscriptionAccount (т. Е. $subscriptionAccount->users()->create([...]);
, он устанавливает правильный subscription_account_id
в таблице users
, но не работает наоборот.