TLDR : SoftDeletes
특성이 부모 모델에 포함되어있는 경우 상위 모델의 소프트 삭제 된 인스턴스를 더 이상 자식의 동적 속성으로 가져 오지 않습니다. 어떻게 할 수 있습니까?모델의 SoftDeletes가 동적 속성을 깨뜨림
나는 다음과 같이 기본 모델의 몇 가지 정의 :
내 컨트롤러에서<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Builder;
class User extends Model
{
use SoftDeletes;
public function posts()
{
return $this->hasMany("App\Post");
}
}
class Post extends Model
{
public function user()
{
return $this->belongsTo("App\User");
}
public function scopePending(Builder $query)
{
return $query->whereNull("pending");
}
}
, 나는 게시물 보류 나열 할, 그래서 내가 할이 :
<?php
namespace App\Controllers;
use App\Post;
class PostController extends Controller
{
public function index()
{
$posts = Post::pending()->get();
return view("post.index", ["pending"=>$posts]);
}
}
그리고 마침내 내 견해로는 :
@foreach($pending as $post)
{{ $post->title }}<br/>
{{ $post->user->name }}<br/>
@endforeach
티 결과가 예외로 던져지며, "비 객체의 속성을 얻으려고 시도 중"이라는 결과가 나옵니다. 소프트 삭제 된 사용자의 경우 $post->user->name
을 출력하려고합니다.
이러한 동적 속성에는 소프트 삭제 된 항목이 포함될 수 있습니까?
정확하지 않습니다. $ this-> belongsTo ("App \ User")'는 'BelongsTo' 객체를 반환합니다. 'BelongsTo' 객체에서'withTrashed()'를 호출하면 확장 된'Relation' 객체의'__call()'메소드로 넘어갑니다. '__call()'메쏘드는 기본'Builder' 객체에서'withTrashed()'를 호출하지만'BelongsTo' 객체를 원래의 호출자에게 돌려줍니다. 그러므로'$ this-> belongsTo ("App \ User") -> withTrashed();'는'BelongsTo' 객체를 반환 할 것입니다. – patricus
@patricus, 설명 주셔서 감사합니다, 지금 무엇을 해야할지 모르겠습니다. 내 대답을 편집/삭제하거나 그대로 유지해야합니까? – huuuk
당신에게 달려 있습니다. 주석은 유용한 정보를 제공하지만 일부 사람들은 주석을 작성하지 않고 답을 읽지 않습니다. 답변을 삭제하거나 수정하여 올바르지 않다고 표시 할 수 있으며 주석의 유용한 정보로 인해 답변을 보관할 수 있습니다. 정보를 유지하기로 결정했다면 답안에 정보를 추가하는 것을 환영합니다. – patricus