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);
}