我想了解一些東西。我有一個有特定領域的項目表。然後我有一個文檔表,它有一個項目的外鍵。爲了證明,我有以下模式Laravel 5處理一對一的關係
Schema::create('projects', function (Blueprint $table) {
$table->increments('id');
$table->string('contactName')->default('');
$table->string('projectName')->default('');
$table->timestamps();
});
Schema::create('document', function(Blueprint $table)
{
$table->increments('id');
$table->longText('documentType')->default('');
$table->longText('documentContent')->default('');
$table->integer('projectId')->unsigned()->default(0);
$table->foreign('projectId')->references('id')->on('projects')->onDelete('cascade');
$table->timestamps();
});
然後我的項目模式具有以下
public function document()
{
return $this->hasOne('App\Document', 'projectId');
}
我的文檔模型具有以下
public function project()
{
return $this->belongsTo('App\Project', 'projectId');
}
所以一個項目可以有一個文檔。這是我想了解的。我的文檔是在項目之後創建的。首先,我通過填寫鏈接到項目創建功能的表單來創建一個項目。完成後,我將被帶到那個項目顯示頁面。在節目頁面上,我有一個表格來完成文檔
{!! Form::model(new App\Document,
[
'class'=>'form-horizontal',
'route' => ['document.store', $project->id]
])
!!}
<div class="form-group">
{!! Form::label('documentType', 'Document Type:', array('class' => 'col-sm-5 control-label blue')) !!}
<div class="col-sm-7">
{!! Form::textArea('documentType', null, array('class' => 'form-control')) !!}
</div>
</div>
<div class="form-group">
{!! Form::label('documentContent', 'Document Data:', array('class' => 'col-sm-5 control-label blue')) !!}
<div class="col-sm-7">
{!! Form::textArea('documentContent', null, array('class' => 'form-control')) !!}
</div>
</div>
<div class="form-group">
{!! Form::submit('Save Data', ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
所以調用的文件存儲功能將數據保存到數據庫中。
這一切工作正常,數據保存以及projectId,所以我能夠鏈接到一個項目的文件。但是,如果我現在再次訪問該項目的展示頁面,則表單空白。如果我填寫這個表單,它會將第二行保存到具有與第一行相同projectId的數據庫中。
如果允許我爲一個項目創建兩個文檔,這是否與一對一關係不矛盾?我如何確保只保存一個文檔,並且下一次訪問項目的顯示頁時,它可能會有一個按鈕來顯示文檔。
感謝
爲什麼不能ü保存專案編號會話,並用它在你製作的看法? –
該文件可能不會立即生成,除非我在這裏忽略了這一點? –
這就顯示了這一點。將projectId存儲在會話中並將其用於創建文檔。當你這樣做時,將documentId存儲在會話中,然後將其用於視圖。 PLZ告訴我,如果你需要示例 –