Laravel Eloquent: во многих отношениях ORM возвращает только один объект

Моя структура таблицы выглядит так:
навыки
-Я бы
— название

отверстия
-Я бы
….

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 для своего веб-приложения.

1

Решение

Итак, я попробовал это сам, и вот рабочий код, который я использовал:

<?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);
});

Я также использовал те же модели, которые вы предоставили. так что я думаю, что ваша проблема может быть в том, как вы создали миграции.
дайте мне знать, если это поможет

0

Другие решения

Может быть, вы должны проверить, являются ли значения внешнего ключа правильными значениями в ваших таблицах соединения?

0

По вопросам рекламы [email protected]