#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. Итак, хороший объясненный ответ.