dimanche 14 juillet 2019

Laravel eloquent insert data with multiple relationship

I have 3 tables:

User
    - id
    - email

UserAccount
    - id
    - user_id
    - account_id

Account
    - id
    - user_id

Verification
    - id
    - user_id
    - guid

I am trying to achieve a post whenever I try to add a user, it will automatically add an account with empty fields but with user_id in it, Verification table with user_id also, at the same time once the Account has been created it should also record UserAccount user_id and account_id but I ended up this error using many to many relationship belongsToMany and sync. How do I add the acct_id and user_id with eloquent?

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'acct_id' cannot be null (SQL: insert into `user_accounts` (`acct_id`, `user_id`) values (?, 17))

This is what I've tried so far.

Controller.php

$user = new User();
$user->name = "Not set";
$user->email = $email;
$user->password = NULL;
$user->save();

$accounts = new Account();
$accounts->email = $email;
$user->account()->save($accounts);

$userAccount = new UserAccount();
$userAccount->userAccount()->sync([
   $user->id,
   $accounts->id
]);

User.php

public function account()
{
    return $this->hasMany(Account::class);
}

public function userAccount()
{
    return $this->belongsToMany(User::class, UserAccount::class, 'user_id', 'id');
}

UserACcount.php

public function user()
{
    return $this->hasMany(User::class, 'user_id', 'id');
}

public function account()
{
    return $this->hasMany(Account::class, 'acct_id', 'id');
}

public function userAccount()
{
    return $this->belongsToMany(Account::class, UserAccount::class, 'acct_id', 'user_id');
}

Verification.php

public function user()
{
    return $this->belongsTo(User::class, 'user_id', 'id');
}

Account.php

public function user()
{
    return $this->hasMany(User::class);
}

public function userAccount()
{
    return $this->belongsTo(UserAccount::class);
}

I tried using this functionality and completely works fine but pretty sure this is how it works with eloquent.

$userAcct = new UserAccount();
$userAcct->create([
    'user_id' => $user->id,
    'acct_id' => $accounts->id
]);

Any thoughts?

I also have did found this related problem (Laravel hasManyThrough)



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire