更新laravel中的关系

时间:2018-09-11 16:23:27

标签: php laravel laravel-5 eloquent

我有一个具有这种关系的模型

Sub HideRows()
    With Sheet3
        .Range("A11:A60").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
        For Each Rng In .Range("A71:A120, A131:A180, A190:A239").Areas
            If Rng(1) = "" Then
                Rng.Offset(-6).Resize(58).EntireRow.Hidden = True
            Else
                Rng.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
            End If
        Next Rng
    End With
End Sub

从我的控制器中,我可以这样从public function users(){ return $this->belongsToMany(User::class); } public function latestUrlStatus(){ return $this->hasOne(UrlStatus::class)->latest(); } 保存(无问题)

many to many relationship

但是当我添加此代码以从另一个关系中保存

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

        if($updateUrl){
            return new UrlsResource($updateUrl);
        }
}

它不会更新最新的URL状态。抱歉,刚接触框架。预先感谢。

2 个答案:

答案 0 :(得分:2)

像这样将更新代码$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实例,那就是您所需要的。

答案 1 :(得分:0)

您可以尝试

$updateUrl->latestUrlStatus()->save()

代替

$updateUrl->push();

$updateUrl->push保存一个模型($ updateUrl)及其所有关系。如果它不起作用并且$updateUrl->latestUrlStatus->save()起作用,那么您知道$updateUrl不会将->latestUrlStatus()识别为关系,可能是因为您使用了函数方法latestUrlStatus()访问子模型,而不是魔术方法->latestUrlStatus