Есть ли способ указать сводную таблицу для имеет много отношений в Laravel? - PullRequest
0 голосов
/ 14 января 2020

У меня есть модель компании, которая имеет отношения с пользователями. У меня есть сводная таблица с именем game_user, сгенерированная с помощью https://github.com/laracasts/Laravel-5-Generators-Extended путем выполнения php artisan make:migration:pivot companies users. У меня есть следующая миграция

public function up()
{
    Schema::create('company_user', function (Blueprint $table) {
        $table->unsignedBigInteger('company_id')->unsigned()->index();
        $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
        $table->unsignedBigInteger('user_id')->unsigned()->index();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->primary(['company_id', 'user_id']);
    });
}

В моей модели компании я сделал функцию сотрудников для отношений

<?php

namespace App\Models;

use App\User;
use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    public function employees()
    {
        return $this->hasMany(User::class);
    }
}

И в моем CompanyController у меня есть следующее

<?php

namespace App\Http\Controllers;

use App\Models\Company;
use Illuminate\Http\Request;

class CompanyController extends Controller
{
    public function index($id)
    {
        return Company::find($id);
    }

    public function employees($id)
    {
        return Company::find($id)->employees;
    }
}

Но при запросе к нему от почтальона с запросом get.

http://localhost/laravel_applications/myapi/public/api/company/1/employees

Я получаю 500 внутренняя ошибка сервера. Разве Laravel не должен автоматически определять таблицу? Я совершенно уверен, что он не обнаруживает и даже не ищет мою сводную таблицу.

Это мой маршрут, я проверил его, возвращая в виде строки, и это работало просто отлично. Так что маршрут работает.

Route::get('company/{id}/employees', 'CompanyController@employees');

1 Ответ

1 голос
/ 14 января 2020

Метод hasMany должен использоваться для отношения один ко многим. Вам нужно вызвать belongsToMany метод для отношения многие ко многим.

...