Данные запроса отношений Laravel 7 не работают

#php #laravel

#php #laravel

Вопрос:

Я хотел бы запросить название компании через сотрудников. Почему не было получено никакого результата? Это не выдает никакой ошибки.

Модель компаний

     public function employees() {
        return $this->hasMany(Employees::class);
    }
  

Модель сотрудников

    
    public function companies() {
        return $this->belongsTo(Companies::class);
    }
  

Контроллер сотрудников

      public function createIndex() {

        $employees = Employees::all();

        return view('employees.create', [
            'employees' => $employees
        ]);
    }
  

Где мне нравится запрашивать

             <div class="form-group">
                <label for="company">Company: </label>
                <select name="company" class="form-control">
                @foreach($employees as $employe)
                    <option selected>Choose...</option>

                    @foreach($employe->companies as $company)
                        <option id="company">{{ $company->name }}</option>
                    @endforeach
                @endforeach
                </select>
            </div>
  

Это миграция таблиц

         Schema::create('companies', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email');
            $table->string('logo');
            $table->string('website');
            $table->timestamps();
        });

        Schema::create('employees', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('fname');
            $table->string('lname');
            $table->string('email');
            $table->string('phone');
            $table->bigInteger('companies_id')->unsigned();
            $table->timestamps();
            $table->foreign('companies_id')->references('id')->on('companies')
                      ->onDelete('cascade');
        });
  

Комментарии:

1. Не могли бы вы, пожалуйста, поделиться своей миграцией таблиц company и employee?

2. Да, я добавил к нему

3. добавьте столбец foreign_key $this-> belongsTo(‘App Companies’, ‘foreign_key’); затем проверьте, что произойдет

Ответ №1:

пожалуйста, предоставьте внешний ключ для вашего отношения…

  public function companies()
 { return $this->belongsTo(Companies::class,'companies_id'); }
  

эта связь означает, что сотрудник работает только в одной компании (принадлежит одной компании)

таким образом, вы не можете выполнить итерацию по нему!

в этой строке:

 @foreach($employe->companies as $company)
                    <option id="company">{{ $company->name }}</option>
                @endforeach
  

employee-> companies вернет только один объект..
если вы хотите показать все компании в качестве параметров, передайте $allCompany следующим образом:

  public function createIndex() {

        $employees = Employees::all();
   $compnanies = Companies::all();
        return view('employees.create', [
            'employees' => $employees,'compnanies'=> $compnanies
        ]);
    }
  

затем вы можете выполнить итерацию $ compnanies в вашем представлении

Комментарии:

1. Итак, хороший объясненный ответ.