gpt4 book ai didi

php - 模型上的 SoftDeletes 会破坏动态属性

转载 作者:行者123 更新时间:2023-12-02 00:10:32 26 4
gpt4 key购买 nike

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

在我的 Controller 中,我想列出待处理的帖子,所以我这样做:

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

关于php - 模型上的 SoftDeletes 会破坏动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37557362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com