【问题标题】:How to update multiple rows in laravel如何在laravel中更新多行
【发布时间】:2021-02-21 03:55:24
【问题描述】:

我想更新userIDclassID 所在表中的现有记录。

$users = User::all(); //Get all users;

$userClasses = UserClass::whereIn('classID', 'users->class_id)
                        ->whereIn('userID', 'users->id)
                        ->update('role' => 3);

但我收到错误Property [id] does not exist on this collection instance. 我知道这是因为 $users 是对象的集合,这就是它返回此错误的原因。但是实现这一目标的最佳方法是什么?提前致谢

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:
    • $users 是一个集合。如果您希望所有 id 都通过诸如 pluck 之类的 Collection 方法获取它们。
    • update('role' => 3) 是无效的语法。应该是update(['role' => 3])
    UserClass::whereIn('classID', $users->pluck('class_id')->all())
             ->whereIn('userID', $users->pluck('id')->all())
             ->update(['role' => 3]);
    

    【讨论】:

    • 感谢您花时间回答这个问题。我还希望用户表中的 classID 不仅是用户 ID。
    【解决方案2】:

    您的代码中有一些拼写错误:

    $users = User::all(); 
    $userClasses = UserClass::whereIn('classID', $users->class_id)
                        ->whereIn('userID', $users->is)
                        ->update(['role' => 3]);
    

    对于集合,您需要遍历它以进行更新

    foreach($users as $user){
        $userClasses = UserClass::whereIn('classID', $user->class_id)
                        ->whereIn('userID', $user->is)
                        ->update(['role' => 3]);
    }
    

    【讨论】:

    • 是你的类 id 不存在于用户集合中,因为你写了这个 '$users->class_id'。
    【解决方案3】:

    如果你有 3 个表(user、class、user_class)表并且用户属于一个类,那么在这种情况下创建一个函数

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

    $userClasses = UserClass::whereIn('classID', $user->class->class_id)
                    ->whereIn('userID', $user->is)
                    ->update(['role' => 3]);
    

    使用$user->class,如果用户属于多个类,则您再次收集使用 pluck,其他虎钳在用户类中使用“hasone 关系”

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2021-04-02
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2019-02-23
      • 2019-11-03
      相关资源
      最近更新 更多