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

Laravel同步多对多关系

党博超
2023-03-14

我在一个laravel控制器中运行以下代码

$organisation->users()->sync($members);

但是我似乎从服务器上得到了以下错误,

{“error”:{“type”:“ErrorException”,“message”:“preg_replace():参数不匹配,模式为字符串,而替换为数组”,“file”:“/Users/S/Sites/app api/vendor/laravel/framework/src/illumb/Support/helpers.php”,“line”:885}

我想它是在抱怨我发送给sync作为参数的形式,这是一个数组,看起来像这样,我假设这是因为我发送了一个格式不好的数组?

要构建我发送到POST中发送的数组的同步I循环的数组,

foreach($postData['members'] as $member) {
    if($member['admin'] == 1) {
        $members[] = array($member['id'] => array('is_admin' => 1));
    } else {
        $members[] = array($member['id'] => array('is_admin' => 0));
    }
}

我试图发送一个数组,其中包含一个键,该键是成员id,然后我还想向pivot表发送一些数据,该表是一个字段is_admin,值可以是1或0。

如果我在运行sync laravel之前返回$members,则返回一些类似以下的JSON,

[
    {
        "1":{"is_admin":1}
    },
    {
        "85":{"is_admin":0}
    },
    {
        "86":{"is_admin":0}
    }
 ]

这是正确的格式吗?我做错什么了吗?

我现在得到一个新的错误,

感谢这个,我现在得到一个新的错误,调用未定义的方法照明\数据库\查询\生成器::同步()

为了清楚起见,这里是我的关系,

组织

public function users()
{
    return $this->belongsToMany('User')->withPivot('is_admin');
}

使用者

public function organisations()
{
    return $this->belongsToMany('Organisation')->withPivot('is_admin');
}

假设多对多关系具有同步关系,我错了吗?

这是完整的方法,

public function update($id)
{   
    //eturn Input::all('name');
    $postData = Input::all();
    $organisation = Organisation::find($id);

    if(!empty($postData['group_name'])) {
        $organisation->name = $postData['group_name'];
    } else {
        $organisation->name = $postData['name'];
    }

    $organisation->information = $postData['information'];
    $organisation->type = $postData['type'];
    $organisation->slug = $this->createSlug($postData['name']);
    //Sort out the members are they admins etc.
    if(isset($postData['members'])) {

        $members = array();

        foreach($postData['members'] as $member) {
            $members[$member['id']] = array('is_admin' => $member['admin']);
        }
    }

    if(isset($postData['clients'])) {

        $clients = array();
        foreach($postData['clients'] as $client) {
            $clients[] = $client['id'];
        }
    }

    if(isset($postData['projects'])) {

        $projects = array();

        foreach($postData['projects'] as $project) {
            $projects[] = $project['id'];
        }
    }

    if( $organisation->save() ) {

        if(isset($members)) {
            $organisation->users()->sync($members);
        }

        if(isset($clients)) {
            $organisation->clients()->sync($clients);
        }

        if(isset($projects)) {
            $organisation->projects()->sync($projects);
        }

        $organisation->load('users');
        $organisation->load('teams');
        $organisation->load('clients');
        $organisation->load('projects');

        return Response::make("success", 200);

    } else {

        return Response::make("Something has gone wrong", 500);

    }

}

共有1个答案

施阳夏
2023-03-14

是的,你的阵列有错误的结构。如果你看文档(需要向下滚动一点),id应该是数组的键。像这样:

array(
    '1' => array('is_admin' => 1),
    '85' => array('is_admin' => 0),
    '86' => array('is_admin' => 0),
);

你可以做一点修改

foreach($postData['members'] as $member) {
    if($member['admin'] == 1) {
        $members[$member['id']] = array('is_admin' => 1);
    } else {
        $members[$member['id']] = array('is_admin' => 0);
    }
}

你也可以写得简单一点

foreach($postData['members'] as $member) {
    $members[$member['id']] = array('is_admin' => $member['admin']);
}
 类似资料:
  • 我有3个标签:用户、教师和帖子。 用户: id-integer name-string 教师: id-integer 教师id-integer 用户id-integer 姓名-string 帖子: id-integer user\u id-integer title-string 用户模型: 教师模式: ??问题是我如何使用这样的东西:

  • 我在Books表和Authors表之间有多对多的关系。透视表(author_book)包含author_id和book_id。

  • 这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统

  • 如果我尝试以下操作,则页面正在加载: 有以下表格:-用户-user_department-部门 数据透视表用户\u部门有两个外键:-部门\u id-用户\u id 在我的用户模型中: 在我的部门模型中: 顺便说一下:以下代码正在工作: 但是我无法在不破坏我的页面的情况下获得用户的部门。 有什么想法吗?

  • 我目前正在用Laravel构建我的第一个应用程序,我偶然发现了一个问题,即我不知道如何设置模型(用户和组)之间的多对多关系。 我已经创建了一个板,其中存储了所有用户和他们所在的组之间的关系。我的问题是,我不知道如何访问和设置这在Laravel。我不确定我是否必须用户has很多或属性。 我正试图找到一种方法,将用户添加到组中,以便在UserGroups表中创建一个新条目。 我的桌子: 用户 ID 集

  • 表朋友:id、用户id、朋友id。 表用户配置文件:id、用户id、名字。。。 如何通过雄辩的ORM获得用户的朋友列表? 用户id:5 |朋友id:6 user_id: 6|friend_id5 类似问题: 与拉拉维尔的友谊系统:多对多关系 拉维尔 我无法理解是谁调用了getFriendsAttribute()方法。 以及如何做到这一点查询生成器。 谢谢