Laravel 4 Laravel 4:雄辩的软删除和关系

Laravel 4 Laravel 4:雄辩的软删除和关系,laravel-4,eloquent,Laravel 4,Eloquent,我有两个表、客户机和项目,一个项目与客户机关联。客户机和项目均实施软删除,以出于存档原因维护关系,即即使我删除了客户机,项目仍将附加客户机信息 我的问题是,当我删除客户机时,该引用将无法从项目中访问,并引发异常。我想做的是软删除客户,但保留项目关系中的客户数据 我的刀片代码如下: @if ($projects->count()) <table class="table table-striped table-bordered"> <thead>

我有两个表、客户机和项目,一个项目与客户机关联。客户机和项目均实施软删除,以出于存档原因维护关系,即即使我删除了客户机,项目仍将附加客户机信息

我的问题是,当我删除客户机时,该引用将无法从项目中访问,并引发异常。我想做的是软删除客户,但保留项目关系中的客户数据

我的刀片代码如下:

@if ($projects->count())
<table class="table table-striped table-bordered">
    <thead>
        <tr>
            <th>Name</th>
            <th>Client</th>
        </tr>
    </thead>

    <tbody>
        @foreach ($projects as $project)
            <tr>
                <td>{{{ $project->name }}}</td>
                <td>{{{ $project->client->name }}}</td>
                <td>{{ link_to_route('projects.edit', 'Edit', array($project->id), array('class' => 'btn btn-info')) }}</td>
                <td>
                    {{ Form::open(array('method' => 'DELETE', 'route' => array('projects.destroy', $project->id))) }}
                        {{ Form::submit('Delete', array('class' => 'btn btn-danger')) }}
                    {{ Form::close() }}
                </td>
            </tr>
        @endforeach
    </tbody>
</table> @else There are no projects @endif

非常感谢。

在模型中定义关系时,使用withTrashed()方法解决了这一问题

原始代码:

public function client() {
    return $this->belongsTo('Client');
}
解决方案:

public function client() {
    return $this->belongsTo('Client')->withTrashed();
}

非常感谢您的帮助。

在我的情况下,我不能像Wally建议的那样修改函数
client
,因为它正在其他模型和控制器中使用,我不希望它通过trashed()获得客户端
->

在这种情况下,我提出了两种解决方案:

在加载客户端时指定
->withTrashed()

$projects = Project::with(['client' => function($query){ $query->withTrashed(); }])->get();
或者用trashed()创建一个新的
客户端
函数
->

现在加载时:

$projects = Project::with(['client_with_trash'])->get();

您是否尝试过使用
::withTrashed()
?是否可以显示迁移。您试图以何种方式删除?我试图删除(软删除)客户,但在查看与客户相关的项目时保留客户名称。我将如何执行withTrashed?关于上述代码,请注意,模型中的withTrashed()似乎就是答案。所以公共函数client(){return$this->belongsTo('client')->withTrashed();}
public function client() {
    return $this->belongsTo('Client');
}

// The new function
public function client_with_trash() {
    return $this->belongsTo('Client')->withTrashed();
}
$projects = Project::with(['client_with_trash'])->get();