更新laravel中的关系 [英] updating a relationship in laravel

查看:80
本文介绍了更新laravel中的关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a model that has a relationship like this

public function users(){
    return $this->belongsToMany(User::class);
}
public function latestUrlStatus(){
    return $this->hasOne(UrlStatus::class)->latest();
}

从我的控制器中,我可以这样从many to many relationship保存(无问题)

from my controller i can save from many to many relationship like this (SUCCESS NO PROBLEM)

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

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

but when i add this code to save from another relation

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状态.抱歉,刚接触框架.预先感谢.

it doesnt update the latest url status. I'm sorry just new to framework. Thanks in advance.

推荐答案

将更新代码$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() return query Builder instance, where has $updateUrl->latestUrlStatus return UrlStatus instance, thats what you need.

这篇关于更新laravel中的关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆