【问题标题】:Laravel: How to get foreign key and pass it to controllerLaravel:如何获取外键并将其传递给控制器
【发布时间】:2019-04-04 11:10:53
【问题描述】:

我正在尝试从category table 中获取id,这是article table 中的foreign key,并在创建文章时将其放置在视图中的hidden 字段中,然后我想要将其传递给article controller,我尝试过但不确定如何执行此操作。显示的错误是

函数参数太少 App\Http\Controllers\ArticleController::create(), 0 已通过且完全正确 预计 1 个

【问题讨论】:

  • 传递给文章控制器意味着什么??
  • 请编辑您的帖子并显示您的文章和类别迁移
  • 我正在创建一篇文章,所以需要将它传递给文章控制器来存储文章
  • 也显示你的迁移
  • 问题是 Laravel 没有将 $id 传递给 ArticleController::create()。您可能在路由配置中缺少一个参数。你能发布ArticleController 路线吗?

标签: php html laravel model key


【解决方案1】:

不要在 create 方法中传递任何内容,而是在您的文章视图中显示类别的下拉列表,以便您可以选择任何类别,然后从该下拉列表中获取类别 ID 到您的 store 方法。

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Category;


class ArticleController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */

public function index()
{
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
  $categories = Category::pluck('title', 'id')
  return view('article.create', ['categories' => $categories]);
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
  $input = $request->all();
  Article::create($input);
  return redirect('article');
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{

}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit($id)
{
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{

}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{

}

}

在你的视野中

{!! Form::open(array('action' => 'ArticleController@store', 'id' => 'createArticle')) !!}
@csrf


    <div class="row large-12 columns">
         {!! Form::label('', 'Category:') !!}
         {!! Form::select('category_id', $categories, null, ) !!}

        {!! Form::label('', 'Title:') !!}
        {!! Form::text('title', null, ['class' => 'large-8 columns']) !!}
    </div>
{!! Form::close() !!}

【讨论】:

  • 非常感谢它成功了!!!有没有其他方法可以做到这一点,因为我需要将我需要以隐藏形式放置在其他表中的外键,我认为该方法可能不适用于他们。
  • 当然可以。但在这种情况下,您需要每次都将类别 ID 显式传递给您的 create 函数。例如,您需要创建一篇新文章,但您必须指定要为哪个类别创建文章。为此,在一页中显示类别列表,然后提供超链接以创建文章的方法,将 category_id 作为参数传递。
猜你喜欢
  • 2021-06-22
  • 2016-09-07
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
相关资源
最近更新 更多