LARAVEL 7 - 如何将变量传递给视图

我有两个表,公司和项目。一个公司有很多项目,一个项目属于一个公司。


公司.php模型


protected $fillable = [

    'id', 'name', 'description'

];


public function projects()

{

    return $this->hasMany('App/Project');

}

Project.php模型


protected $fillable = [

    'name', 'description', 'company_id', 'days'

];


public function company()

{

    return $this->belongsTo('App/Company');

}

在我的 index.blade.php 中,我只列出了公司,并让它们可以点击,这样当用户点击列出的公司时,他们就会被带到 show.blade.php,其中包含公司名称和所属项目到那家公司是这样显示的。


<div class="jumbotron">

     <h1>{{ $company->name }}</h1>

       <p class="lead">{{ $company->description }}</p>

    </div>


<div class="row">

    @foreach($company->projects as $project)

    <div class="col-lg-4">

        <h2>{{ $project->name }}</h2>

        <p class="text-danger">{{ $project->description }}</p>

        <p><a class="btn btn-primary" href="/projects/{{ $project->id }}" role="button">View Projects »</a></p>

    </div>

    @endforeach

</div>

现在我得到一个未定义的变量$project错误。所以我决定像这样在 CompaniesController.php 的 show() 函数中声明变量


public function show(Company $company)

{

    $company = Company::find($company->id);

    $projects = Company::find(1)->projects;


    return view('companies.show', ['company' => $company, 'projects' => $projects]);

}

并像这样访问 show.blade.php 中的变量


    <div class="jumbotron">


    <h1>{{ $company->name }}</h1>

    <p class="lead">{{ $company->description }}</p>

</div>

<div class="row">


    @foreach($projects as $project)

    <div class="col-lg-4">

        <h2>{{ $project->name }}</h2>

        <p class="text-danger">{{ $project->description }}</p>

        <p><a class="btn btn-primary" href="/projects/{{ $project->id }}" role="button">View Projects »</a></p>

    </div>

    @endforeach

</div>

现在,当我访问 show.blade.php 时出现“未找到类‘应用程序/项目’”错误。我在将公司项目传递给视图时遇到了挑战。任何帮助将不胜感激。这是我的路线;


    Route::get('/', function () {

    return view('welcome');

});


Auth::routes();


Route::get('/home', 'HomeController@index')->name('home');

Route::resource('companies', 'CompaniesController');

Route::resource('projects', 'ProjectsController');


缥缈止盈
浏览 115回答 3
3回答

隔江千里

如果我是对的,我会很搞笑的……在定义关系的模型中,将 App/Project 替换为 App\Project。对 Company... 执行相同操作。将“/”替换为“\”。

达令说

您已经在使用模型绑定。在您的显示方法中,您不需要查找。只返回你需要的public function show(Company $company){&nbsp; &nbsp; return view('companies.show', ['company' => $company];}在您看来,您可以执行以下操作:@foreach($company->projects as $project)...@endforeach

哈士奇WWW

您必须Project正确命名空间类确保文件名是Project.php确保内部Project.php命名空间声明是正确的:namespace App;确保里面的类名Project.php是“项目”:class Project extends Model { ...确保您已将其导入控制器。use App\Project完成所有这些之后你不会得到错误:Class 'App/Project' not found
打开App,查看更多内容
随时随地看视频慕课网APP