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

Wal*_*lly 12 eloquent laravel-4

我有2个表,客户端和项目,一个项目与客户端相关联.由于存档原因,客户端和项目都实现了软删除以维护关系,即使我删除了客户端,项目仍将附加客户端信息.

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

我的刀片代码如下:

@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
Run Code Online (Sandbox Code Playgroud)

以下是迁移:

        Schema::create('clients', function(Blueprint $table) {

        // Table engine
        $table->engine = 'InnoDB';

        // Increments
        $table->increments('id');

        // Relationships

        // Fields
        $table->string('name');

        // Timestamps
        $table->timestamps();

        // Soft deletes
        $table->softDeletes();

    });


        Schema::create('projects', function(Blueprint $table) {

        // Table engine
        $table->engine = 'InnoDB';

        // Increments
        $table->increments('id');

        // Relationships
        $table->integer ('client_id');

        // Fields
        $table->string('name');

        // Timestamps
        $table->timestamps();

        // Soft deletes
        $table->softDeletes();

        // Indexes
        $table->index('client_id');


    });
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Wal*_*lly 31

在定义模型中的关系时,通过使用withTrashed()方法解决了这个问题.

原始代码:

public function client() {
    return $this->belongsTo('Client');
}
Run Code Online (Sandbox Code Playgroud)

解:

public function client() {
    return $this->belongsTo('Client')->withTrashed();
}
Run Code Online (Sandbox Code Playgroud)

非常感谢Glad to Help.