Моя структура таблицы выглядит так:
навыки
-Я бы
— название
отверстия
-Я бы
….
openings_skills
-Я бы
-opening_id
-skill_id
Это мои две модели.
class Skill extends Eloquent {
protected $table = 'skills';
public function opening() {
return $this->belongsToMany('Opening', 'openings_skills');
}
}class Opening extends Eloquent {
protected $table = 'openings';
public function skill() {
return $this->belongsToMany('Skill', 'openings_skills');
}
}
Когда я пытаюсь получить данные, используя приведенный ниже код, я получаю только один объект в коллекции, поэтому итерация по нему дает мне имя навыка.
$opening = Opening::find($id);
foreach($opening->skill as $skill){
echo $skill;
}
Как я могу извлечь все навыки для этого конкретного открытия, используя сводную таблицу «openings_skills»?
П.С .: Я использую версию Laravel 4.9.11 для своего веб-приложения.
Итак, я попробовал это сам, и вот рабочий код, который я использовал:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSkillsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('skills', function($table){
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('skills');
}
}
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateOpeningsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('openings', function($table){
$table->increments('id');
$table->string('opening');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('openings');
}
}
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateOpeningsSkillsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('openings_skills', function($table)
{
$table->increments('id');
$table->integer('skill_id')->unsigned()->index();
$table->integer('opening_id')->unsigned()->index();
$table->foreign('skill_id')->references('id')->on('skills')->onDelete('cascade');
$table->foreign('opening_id')->references('id')->on('openings')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('openings_skills');
}
}
// и вот маршрут, который я использовал.
Route::get('/', function()
{
$opening = Opening::find(1);
dd($opening->skill);
});
Я также использовал те же модели, которые вы предоставили. так что я думаю, что ваша проблема может быть в том, как вы создали миграции.
дайте мне знать, если это поможет
Может быть, вы должны проверить, являются ли значения внешнего ключа правильными значениями в ваших таблицах соединения?