2015-09-06 20 views
2

我有一個項目表並用以下結構的報價表:Laravel 5.1如何將對象的id傳遞給另一個視圖以用作另一個表中的外鍵?

Schema::create('quotes', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('project_id')->index()->unsigned(); 
      $table->decimal('quote', 10,0); 
      $table->timestamps(); 

在項目頁面,我需要它指的是頁面創建一個新的報價的鏈接。我如何將項目的ID傳遞給報價的創建視圖?

UPDATE

我試過閃爍項目ID的會話的,然後得到它的報價控制器,但通過的時候我試圖得到它那裏的會話emty!

//flashing project_id to the session 
     $request->session()->flash('project_id', $project->id); 
or 
     $request->session()->flash('project_id', $project->id); 
     $request->session()->reflash(); 
or 
     $request->session()->flash('project_id', $project->id); 
     $request->session()->keep(['project_id']);; 
//getting it in quote controller 
     $project_id=$request->session()->get('project_id'); 

是什麼問題?

回答

0

我發現這worked.In項目控制器的顯示方法我用了put()方法閃爍的項目 - 一個解決方案> id來會話:

$request->session()->put('project_id', $project->id); 

然後在引用控制器的create方法中,我使用pull()方法將project_id取出會話。

$id=$request->session()->pull('project_id'); 

但與這種方法有點問題,並且如果用戶決定刷新表單頁面就會出現在會議上沒有PROJECT_ID關鍵。爲了解決這個問題,我決定將用戶重定向到項目列表以再次選擇一個項目。

2

假設U有一個Project模型,並且$project是它的一個實例。獲取標識項目,並將它傳遞給這樣的報價觀點:

$project_id = $project->id; 
return redirect()->intended('your_view')->with('project_id' , $project_id); 

$project_id存儲在會話。所以,你可以很容易地檢索它像這樣的槳葉:

if(session()->has('project_id')){ 
    $project_id = session('project_id'); 
    // do whatever u want with the $project_id and set it in quote table 
} 
+0

@ peyman-h謝謝,但創建報價視圖的鏈接位於展示項目視圖中,我已經可以訪問$ project-> id。問題是如何將此變量傳遞給下一個視圖,即在引用控制器中使用的創建報價視圖 –

1

首先,你可以這樣定義足智多謀的路線:

Route::resource('projects.quotes', 'QuotesController'); 

現在,在您的項目頁面將此代碼放置在要顯示鏈接創建報價:

{!! link_to_route('projects.quotes.create', 'Create Quote', $project->id) !!} 

現在,修改你的QuotesController的創建功能是這樣的:

現在3210
public function create($project_id) 
{ 
    $project = App\Project::find($project_id); 
    return view('quotes.create', compact('project')); 
} 

,你可以在你create.php或create.blade.php視圖文件中使用$項目數據

+0

謝謝,但此方法不起作用。它會創建一個像這樣的鏈接:quote/create?1,我不能在引用控制器中使用它。 –

+0

爲什麼你不能在引號控制器中使用它? – gskhanal

+0

,因爲沒有定義這樣的路線 –

0

Laravel可以讓你的看法之間共享變量。您可以將其添加到現有的AppServiceProvider或創建您自己的。

在所選擇的服務提供者:

public function boot() 
{ 
    view()->share('username','Joe'); 
} 

可變$username是提供給所有視圖。 您也可以從控制器調用share方法或在渲染視圖之前的任何地方。

View::share('key','value'); 

希望這有助於

+0

我認爲這種方法最適合像會話中修復的'用戶名'這樣的變量。 –

相關問題