LARAVEL 7 - Как передавать переменные в представления - PullRequest
0 голосов
/ 30 мая 2020

У меня есть две таблицы: Компании и Проекты. Компания имеет Множество проектов, а проект принадлежит компании.

Компания. php модель

protected $fillable = [
    'id', 'name', 'description'
];

public function projects()
{
    return $this->hasMany('App/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>

Теперь я получаю ошибку undefined variable $ project . Поэтому я решил объявить переменную в своей функции show () в CompaniesController. php вот так

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');

Ответы [ 3 ]

0 голосов
/ 30 мая 2020

Вы уже используете привязку модели. В вашем методе показа вам не нужно искать. просто верните то, что вам нужно

public function show(Company $company)
{
    return view('companies.show', ['company' => $company];
}

На ваш взгляд, вы можете сделать:

@foreach($company->projects as $project)
...
@endforeach
0 голосов
/ 30 мая 2020

Было бы весело, если бы я был прав ....

В ваших моделях, где определяющие отношения заменяют App / Project на App \ Project. Сделайте то же самое для компании .... Замените "/" на "\".

0 голосов
/ 30 мая 2020

Вы должны правильно указать пространство имен Project класс

  1. Убедитесь, что имя файла - Project.php
  2. Убедитесь, что внутри Project.php объявление пространства имен правильно: namespace App;
  3. Убедитесь, что имя класса внутри Project.php - «Project»: class Project extends Model { ...
  4. Убедитесь, что вы импортировали его в контроллер. use App\Project

После всего этого вы не получите ошибку:

Class 'App/Project' not found

Вы правильно передали переменную в view, но посмотрите здесь другие примеры и методы, передающие это: https://laravel.com/docs/7.x/views

Надеюсь, это поможет вам

...