Php 在laravel中更新关系
我有一个模型有这样的关系Php 在laravel中更新关系,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我有一个模型有这样的关系 public function users(){ return $this->belongsToMany(User::class); } public function latestUrlStatus(){ return $this->hasOne(UrlStatus::class)->latest(); } 通过我的控制器,我可以像这样保存多对多关系(成功没有问题) 但当我添加此代码以从另一个关系保存时 public functio
public function users(){
return $this->belongsToMany(User::class);
}
public function latestUrlStatus(){
return $this->hasOne(UrlStatus::class)->latest();
}
通过我的控制器,我可以像这样保存多对多关系(成功没有问题)
但当我添加此代码以从另一个关系保存时
public function update(Request $request, $id)
{
$updateUrl = Url::findOrFail($id);
$updateUrl->url = $request->input('url');
$updateUrl->description = $request->input('description');
$updateUrl->users()->sync(array_pluck($request->input('selectedTags'), 'id'));
$updateUrl->save();
//THIS CODE UP TO LAST
$httpCode = check_http_header($request->input('url'));
$status = "UP";
$url = Url::with('latestUrlStatus','users')->findOrfail($id);
$updateUrl->latestUrlStatus()->status_code = $httpCode;
$updateUrl->latestUrlStatus()->status = $status;
$updateUrl->push();
if($updateUrl){
return new UrlsResource($updateUrl);
}
}
它不会更新最新的url状态。很抱歉,我刚接触框架。提前谢谢。你可以试试
$updateUrl->latestUrlStatus()->save()
而不是
$updateUrl->push();
$updateUrl->push
保存模型($updateUrl)及其所有关系。如果它不起作用并且$updateUrl->latestUrlStatus->save()
起作用,那么您知道$updateUrl
只是不将->latestUrlStatus()
识别为一个关系,可能是因为您使用函数方法latestUrlStatus()
,来访问子模型,不是像这样将更新代码$updateUrl->latestUrlStatus()更改为$updateUrl->latestUrlStatus()
的神奇方法
$updateUrl = Url::with('latestUrlStatus','users')->findOrfail($id);
$updateUrl->latestUrlStatus->status_code = $httpCode;
$updateUrl->latestUrlStatus->status = $status;
$updateUrl->push();
if($updateUrl){
return new UrlsResource($updateUrl);
}
$updateUrl->latestUrlStatus()
返回查询Builder
实例,其中有$updateUrl->latestUrlStatus
返回UrlStatus
实例,这就是您需要的。将$updateUrl->latestUrlStatus()
更改为$updateUrl->latestUrlStatus
,然后把它放到答案上
$updateUrl = Url::with('latestUrlStatus','users')->findOrfail($id);
$updateUrl->latestUrlStatus->status_code = $httpCode;
$updateUrl->latestUrlStatus->status = $status;
$updateUrl->push();
if($updateUrl){
return new UrlsResource($updateUrl);
}