mik*_*n32 2 php soft-delete laravel eloquent laravel-5
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");
}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我想列出待处理的帖子,所以我这样做:
<?php
namespace App\Controllers;
use App\Post;
class PostController extends Controller
{
public function index()
{
$posts = Post::pending()->get();
return view("post.index", ["pending"=>$posts]);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在我看来:
@foreach($pending as $post)
{{ $post->title }}<br/>
{{ $post->user->name }}<br/>
@endforeach
Run Code Online (Sandbox Code Playgroud)
这导致抛出异常,"尝试获取非对象的属性",其中行号对应于我尝试为$post->user->name已被软删除的用户输出的位置.
如何将这些动态属性包含在软删除的项目中?
显然,相关用户模型已被软删除,这就是未加载相关用户的原因.
像下面的代码一样定义关系,无论是否已经软删除,您都将始终能够获取用户:
public function user()
{
return $this->belongsTo("App\User")->withTrashed();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |