TLDR:当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
已被软删除的用户尝试输出的位置相对应。
如何使这些动态属性包括软删除的项目?
显然,相关用户模型已被软删除,这就是为什么不加载相关用户的原因。
像下面的代码中那样定义关系,无论用户是否被软删除,您始终可以获取用户:
public function user()
{
return $this->belongsTo("App\User")->withTrashed();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句