当前位置: 首页 > 知识库问答 >
问题:

Laravel雄辩地插入具有多种关系的数据

计阳泽
2023-03-14

我有三张桌子:

User
    - id
    - email

UserAccount
    - id
    - user_id
    - account_id

Account
    - id
    - user_id

Verification
    - id
    - user_id
    - guid

每当我尝试添加用户时,我试图获得一个帖子,它会自动添加一个帐户,其中包含用户id验证表以及用户id,同时,一旦创建了帐户,它还应该记录用户帐户用户id帐户id,但我使用多对多关系归属同步结束了这个错误。如何使用eloquent添加帐户id用户id

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

这就是我迄今为止所尝试的。

控制器。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
]);

使用者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');
}

账户php

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

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

我尝试使用这个功能,完全可以正常工作,但我很确定这就是它如何与雄辩。

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

有什么想法吗?

我也发现了这个相关的问题(Laravel hasManyPass)

共有2个答案

柯建修
2023-03-14
// Post Model
 public function user()
    {
        return $this->belongsTo('App\User');
    }
    public function categories()
    {
        return $this->belongsToMany('App\Category')->withTimestamps();
    }
    public function tags()
    {
        return $this->belongsToMany('App\Tag')->withTimestamps();
    }

//User Model
 public function posts()
    {
        return $this->hasMany('App\Post');
    }

//Category Model

 public function posts()
    {
        return $this->belongsToMany('App\Post')->withTimestamps();
    }

//Tag Model 

public function posts()
    {
        return $this->belongsToMany('App\Post')->withTimestamps();
    }
童花蜂
2023-03-14

首先,您应该从account表中删除user\u id,因为它已经被链接两个表的user\u account引用。此外,如果您想利用有说服力的约定来猜测表名和字段,您应该确保您的表名为用户帐户验证帐户用户

使用者php

public function accounts()
{
    return $this->belongsToMany(Account::class);
}

账户php

public function users()
{
    return $this->belongsToMany(User::class);
}

如果account\u user仅存在链接2个表,则UserAccount模型无效。

然后,您可以使用观察者来获得基于事件的方法:每当创建用户时=

https://laravel.com/docs/5.8/eloquent#observers

<?php

namespace App\Observers;

use App\Account;
use App\Verification;

class UserObserver
{
    /**
     * Handle the User "created" event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function created(User $user)
    {
        (new Verification)->user()->associate($user);
        $account = new Account;
        $account->save();
        $user->accounts()->attach([
            $account->id
        ]);
    }
}
 类似资料:
  • 我的结构如下: 3张表格:电影、演员、类型 电影表模式: 类型表架构: 演员表架构: 电影模组: 体裁模态: 演员模式: 表格: 我使用以下控制器方法从表单发布数据,一切正常,但当我提交2部电影具有相同的流派,例如“动作/戏剧”,我在流派表中得到2个单独的条目,如: id:1名称:动作/戏剧 ID: 2名称:动作/戏剧 对于一个特定的流派类型,反复使用单个id的最佳方法是什么?例如,如果我添加了1

  • 我得到了一个相当简单的应用程序,用户可以报告其他用户的评论和食谱。我使用多态关系来存储报告。它工作得很好;然而,我现在正试图了解用户所犯的罪行。 获取用户报告不是问题,这可以直接使用

  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可

  • 我有帖子表和评论表。我想得到所有的帖子与它的评论和以下返回只是帖子有评论: 更新 例如 ID帖 1个职位1 2后2 id post\u id评论 1萨姆勒大学评论 Post::with('comments')只返回有注释的帖子,它只返回第一篇帖子,因为第二篇帖子没有注释,我想获取所有帖子(有注释或没有注释)

  • 如何使用laravel雄辩的ORM关系在多个表中发出一个插入请求。即 表1:用户 id 姓名 电子邮件 表2:员额 id 表3:图像 id 用户id 邮政id 图像名称 关系 表id引用了其他两个表中的 表与

  • 我试着补充: 并用调用,但响应为空。