Laravel 5.1如何将对象的id传递给另一个视图以用作另一个表中的外键?

时间:2015-09-06 18:47:41

标签: php laravel laravel-5.1

我有一个项目表和一个带有以下结构的引号表:

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

在项目页面上,我需要一个链接,该链接指的是用于创建新报价的页面。如何将项目的ID传递给报价的创建视图?

更新

我尝试将项目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');

问题是什么?

4 个答案:

答案 0 :(得分:2)

假设U有一个Project模型,$project是它的一个实例。获取项目的ID并将其传递给引用视图,如下所示:

$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
}

答案 1 :(得分:1)

首先,您可以像这样定义资源丰富的路线:

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

现在,在项目页面中,将此代码放在要显示创建引号的链接的位置:

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

现在,修改你的QuotesController创建函数,如下所示:

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

现在,您可以在create.php或create.blade.php视图文件中使用$ project数据

答案 2 :(得分:0)

Laravel允许您在视图之间共享变量。您可以将其添加到现有AppServiceProvider或创建自己的public function boot() { view()->share('username','Joe'); }

在选定的服务提供商中:

$username

变量share可供所有视图使用。 您还可以在渲染视图之前从控制器或任何位置调用View::share('key','value'); 方法。

    html, body {
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
    .wrapper {
      background-color: rgba(0,0,0,0.1);
      position: relative;
      width: 100%;
      max-height: 100%;
    }
    .wrapper:before {
      content: "";
      display: block;
      padding-top: 175%;
    }
    .content {
      position:  absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
    }

希望这个帮助

答案 3 :(得分:0)

我找到了一个有效的解决方案。在项目控制器的show方法中,我使用put()方法将项​​目 - > id刷新到会话:

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

然后在引号控制器的create方法中,我使用pull()方法将project_id从会话中删除。

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

但是这种方法存在一些问题,如果用户决定刷新表单页面,会话中将没有project_id键。为了解决这个问题,我决定将用户重定向到项目列表,再次选择一个。