Обновление отношений в Laravel - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть модель, которая имеет отношения, подобные этой

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

, но когдая добавляю этот код, чтобы сохранить от другого отношения

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.Я извиняюсь, просто новичок в рамках.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Измените свой код обновления $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 экземпляр, вот что вынеобходимо.

0 голосов
/ 11 сентября 2018

Вы можете попробовать

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

вместо

$updateUrl->push();

$updateUrl->push сохраняет модель ($ updateUrl) и все ее отношения. Если это не работает и $updateUrl->latestUrlStatus->save() работает, то вы знаете, что $updateUrl просто не распознает ->latestUrlStatus() как отношение, вероятно, из-за того, что вы используете метод функции latestUrlStatus() для доступа к подмодели, а не к магическому методу ->latestUrlStatus

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...