laravel nova BelongsToMany - Принадлежит к центру - PullRequest
0 голосов
/ 11 декабря 2018

В Laravel Nova у меня есть отношения BelongsToMany (компании - сводка - запросы).

В сводной таблице у меня есть несколько дополнительных столбцов, к которым я получаю доступ с помощью полей сводки (https://nova.laravel.com/docs/1.0/resources/relationships.html#belongstomany), который прекрасно работает.

Но теперь у меня есть особый случай, когда у меня естьдополнительные отношения BelongsTo от сводной таблицы к третьей таблице (состояния). Я попытался определить поле BelongsTo в полях сводки, но это не работает.

BelongsToMany::make('Companies', 'companies', Company::class)->fields(new CompanyRequestFields()),

поля сводки:

class CompanyRequestFields
{
    /**
     * Get the pivot fields for the relationship.
     *
     * @return array
     */
    public function __invoke()
    {
        return [
            Number::make('preis'),
            Text::make('bezahlt'),
             BelongsTo::make('State', 'state', States::class),
        ];
    }
}

Ошибка, которую я получаю:

Call to undefined method Illuminate\Database\Eloquent\Relations\Pivot::state()

Состояние отношения () фактически существует в модели Pivot, и также существует класс состояния ресурса Nova.

Так выглядит этоне поддерживается в PivotFields? Или кто-нибудь знает, возможно ли это сделать?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

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

class CompanyRequestFields
{
    public function __invoke()
    {
        $states= \App\State::all()->pluck('name', 'id');

        return [
            ...
            Select::make('State')->options($states),
        ];
    }
}

В \App\Request модели

public function companies()
{
    return $this->belongsToMany('App\Company')->withPivot('state');
}

Надеюсь, этот подход поможет вам.

0 голосов
/ 11 декабря 2018

Это для Normal Laravel . Просто измените синтаксис на laravel nova, если можете!

В Normal Laravel, если вы хотите определить пользовательскийДля представления промежуточной таблицы ваших отношений вы можете вызывать метод using при определении отношений.Настраиваемые модели множества-ко-многим должны расширять класс Illuminate \ Database \ Eloquent \ Relations \ Pivot, тогда как настраиваемые полиморфные модели множества-ко-многим должны расширять класс Illuminate \ Database \ Eloquent \ Relations \ MorphPivot.В вашем случае вы можете определить пользовательскую модель сводки Companies_requests:

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class Companies_requests extends Pivot
{
    //
}

и ссылаться на нее в модели вашей компании и модели запроса:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    public function requests()
    {
        return $this->belongsToMany('App\Request')->using('App\Companies_requests');
    }
}

.

namespace App;

use Illuminate\Database\Eloquent\Model;

class Request extends Model
{
    public function companies()
    {
        return $this->belongsToMany('App\Company')->using('App\Companies_requests');
    }
}

Теперь ->pivot будет вашей новой моделью!

Надеюсь, это то, что вы ищете:)

...