Php 困在拉威尔,试图保存数据

Php 困在拉威尔,试图保存数据,php,laravel,Php,Laravel,我试图保存数据,但出现以下错误: Illumb\Database\Eloquent\Relations\HasOneOrMany::save():参数#1($model)必须为Illumb\Database\Eloquent\model类型,给定数组,在第52行的C:\xampp\laravelprojects\testfrihand\app\Http\Controllers\ProfileController.php中调用 这是保存数据的功能: public function updatepr

我试图保存数据,但出现以下错误:

Illumb\Database\Eloquent\Relations\HasOneOrMany::save():参数#1($model)必须为Illumb\Database\Eloquent\model类型,给定数组,在第52行的C:\xampp\laravelprojects\testfrihand\app\Http\Controllers\ProfileController.php中调用

这是保存数据的功能:

public function updateprofile(Request $request, Profile $about){
       auth()->user()->profile()->save([
        
            'about'=>$request->about,
            
        ]);
用户模型:

public function profile(){
        return $this->hasOne(\App\Models\Profile::class);
    }

我不确定模型中是否有错误。我想这是因为它提到了关系。但我在这里不知所措,因为如果我更改为创建,由于某种原因,它可以正常工作

如果不存在,您可以使用updateOrCreate创建和/或更新(如果存在)

auth()->user()->profile()->updateOrCreate(['user_id'=>auth()->id()],[
    
        'about'=>$request->about,
        
    ]);

如果在代码中的这一点上,您可以保证该用户具有相关的配置文件记录,则您可以通过关系检索该配置文件并对其进行更新:

auth()->user()->profile->update([...]);
如果用户可能还没有配置文件,您可以使用类似于
updateOrCreate

auth()->user()->profile()->updateOrCreate(
    [],
    ['about' => $request->about]
);
基本上是这样的:

auth()->user()->profile()->firstOrNew()->fill([...])->save();

问题是,save方法accept object not array并尝试向其发送数组,因此可以执行以下操作:-

$profile = new Profile();
$profile->about = $request->about;
auth()->user()->profile()->save($profile); 
auth()->user()->profile()->update([
        
            'about'=>$request->about,
            
        ]);
或者您可以使用如下更新方法:-

$profile = new Profile();
$profile->about = $request->about;
auth()->user()->profile()->save($profile); 
auth()->user()->profile()->update([
        
            'about'=>$request->about,
            
        ]);

欢迎来到苏。。。如果要通过关系和传递属性“创建”新记录,则要查找的是
create
方法,而不是
save
。。。如果您试图更新此相关记录,您可以使用
update
,但这取决于您是想使用eloquent还是绕过它来进行更新,但我不想创建。这是一个用户配置文件,所以他将插入只能更新的数据,而不能重新创建。只有在我创建了数据的情况下,更新才有效。据我所知,我需要使用save如果你没有创建记录,那么你就不是在“更新”你正在创建的我需要创建的记录,但是用户不能创建很多about。我英语不好,我正在尽力解释。如果你登录到你的帐户,你有一个关于字段。你写你自己,这将被发送到数据库,如果他在同一个字段中写,它将被更新,而不是重新创建。第一个答案告诉我:参数太少,无法使用函数illumb\database\elount\Relations\HasOneOrMany::save(),0在第52行的C:\xampp\laravelprojects\testfrihand\app\Http\Controllers\ProfileController.php中传递,预期正好是1。我不想更新,因为我需要一个已经存在的记录尝试这个$profile=newprofile()$profile->about=$request->about;auth()->user()->profile()->save($profile);在第二个解决方案中,您可以使用firstOrNew()->fill()->save()代替update,并告诉我结果谢谢!成功了。我一整天都在忙这个。顺便问一下,updateOrCreate和使用save有什么区别?@CarlMenger save()方法在您为其提供新模型实例(即->save(新配置文件(['key'=>'value]))时起到插入的作用,并且在您为其提供现有模型实例和更改某些道具时也起到更新的作用。updateOrCreate是一种在onceThanks上检查这两件事以获取解释的简捷方法。我只是看到它被插入和更新,并且它是正确的使用方法。谷歌搜索了好几个小时,真是太好了,我从来没见过updateOrCreate(不客气:))updateOrCreate成功了,谢谢!顺便问一下,save和updateorcreate之间有什么区别?对关系调用
save
需要传递相关的模型实例,因此调用
$user->profile()->save()
需要向其传递
profile
模型
updateOrCreate
正在对关系执行选择查询以查找匹配的记录,如果找到,则填充并保存(更新),如果未找到,则使用这些属性创建一条记录。。。对关系调用
save
与对关系调用
save
不同model@sta在本例中没有要搜索的属性,关系本身添加了确保该记录属于其父记录所需的条件,因此这基本上是说获取第一条相关记录,因为将空数组传递给
where
不会添加whereconditions@sta这就是:
auth()->user()->profile()->firstOrNew()->fill([…])->save()
基本上。。。好问题btw@lagbox很好的解释,谢谢。