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();
}
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);
}
}
it doesnt update the latest url status. I'm sorry just new to framework. Thanks in advance.
You can try
instead of
$updateUrl->push
saves a model ($updateUrl) and all it's relations. If it doesn't work and$updateUrl->latestUrlStatus->save()
works, then you know that$updateUrl
just doesnt recognize->latestUrlStatus()
as a relation, probably because of you using the function methodlatestUrlStatus()
, to access the submodel, not the magic method->latestUrlStatus
Change in your update code
$updateUrl->latestUrlStatus()
to$updateUrl->latestUrlStatus
like this$updateUrl->latestUrlStatus()
return queryBuilder
instance, where has$updateUrl->latestUrlStatus
returnUrlStatus
instance, thats what you need.