ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[danger] 关联保存 官方文档对以下方法的解释原文: `如果还没有关联数据 则进行新增` 这句话会误解多少人,反正我是被坑了!心想就是有关联数据时就是更新呗,其实并不是 下面这种用法无论是否关联到数据都是只会关联新增,而不会关联更新 ``` $user = User::find(1); $user->profile()->save(['email' => 'thinkphp']); ``` >[danger] 一对一关联更新 **使用前提:以下关联更新的用法只支持一对一关联并且能关联到数据的情况** **$user->profile 的值:** 当 profile() 使用的是一对一关联方法 hasOne() 时,能关联到数据则返回模型数据对象,此时可以调用save(); 关联不到数据返回null, 此时使用 `$user->profile->email` 直接报错了,所以需要必须能关联到数据 当 profile() 使用的是一对多关联方法 hasMany() 时,无论是否能关联到数据,都返回模型数据集对象,模型数据集对象不能调用save()方法,所以上面强调 profile() 必须是一对一关联 ``` $user = User::find(1); $user->profile->email = 'thinkphp'; $user->profile->save(); // 或者 $user->profile->save(['email' => 'thinkphp']); ``` >[danger] 一对多关联更新 ``` // 用户id $user_id = 1; $data = User::findOrEmpty($user_id); // 返回数据集对象 $collection = $data->comments()->select(); // 遍历数据集对象, 更新关联的数据 foreach($collection as $model) { $bool = $model->save(['content' => '太棒了!']); } ```