Поле BelongsToMany
предназначено для работы с одноименной связью в Laravel и включает все Базовые методы.
BelongsToMany::make(
Closure|string $label,
?string $relationName = null,
Closure|string|null $formatted = null,
ModelResource|string|null $resource = null,
)
BelongsToMany::make(
Closure|string $label,
?string $relationName = null,
Closure|string|null $formatted = null,
ModelResource|string|null $resource = null,
)
BelongsToMany::make(
Closure|string $label,
?string $relationName = null,
Closure|string|null $formatted = null,
ModelResource|string|null $resource = null,
)
BelongsToMany::make(
Closure|string $label,
?string $relationName = null,
Closure|string|null $formatted = null,
ModelResource|string|null $resource = null,
)
BelongsToMany::make(
Closure|string $label,
?string $relationName = null,
Closure|string|null $formatted = null,
ModelResource|string|null $resource = null,
)
$label
- метка, заголовок поля,
$relationName
- название связи,
$formatted
- замыкание или поле в связанной таблице для отображения значений,
$resource
- ModelResource
, на которую ссылается связь.
Наличие ModelResource
, на который ссылается отношение, обязательно.
Ресурс также необходимо зарегистрировать в сервис-провайдере MoonShineServiceProvider
в методе $core->resources()
.
В противном случае будет ошибка 500.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
resource: CategoryResource::class
)
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
resource: CategoryResource::class
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
resource: CategoryResource::class
)
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
resource: CategoryResource::class
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
resource: CategoryResource::class
)

Вы можете опустить $resource
, если ModelResource
совпадает с названием связи.
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories')
Если не указать $relationName
, то имя связи будет определено автоматически на основе $label
(по правилам camelCase).
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories')
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories')
По умолчанию для отображения значения используется поле в связанной таблице, которое указано свойством $column
в ресурсе модели.
Аргумент $formatted
позволяет переопределить это.
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
formatted: 'name'
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
formatted: 'name'
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
formatted: 'name'
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
formatted: 'name'
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
formatted: 'name'
)
Если вам нужно указать более сложное значение для отображения, тогда в аргумент $formatted
можно передать функцию обратного вызова.
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
fn($item) => "$item->id. $item->title"
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
fn($item) => "$item->id. $item->title"
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
fn($item) => "$item->id. $item->title"
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
fn($item) => "$item->id. $item->title"
)
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make(
'Categories',
'categories',
fn($item) => "$item->id. $item->title"
)
По умолчанию заголовок столбца таблицы использует свойство $title
, указанное в ModelResource
отношения.
Метод columnLabel()
позволяет переопределить заголовок.
columnLabel(string $label)
columnLabel(string $label)
columnLabel(string $label)
columnLabel(string $label)
columnLabel(string $label)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->columnLabel('Title')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->columnLabel('Title')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->columnLabel('Title')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->columnLabel('Title')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->columnLabel('Title')
Метод fields()
используется для реализации полей pivot в отношении BelongsToMany
.
fields(FieldsContract|Closure|iterable $fields)
fields(FieldsContract|Closure|iterable $fields)
fields(FieldsContract|Closure|iterable $fields)
fields(FieldsContract|Closure|iterable $fields)
fields(FieldsContract|Closure|iterable $fields)
use App\MoonShine\Resources\ContactResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Text;
BelongsToMany::make(
'Contacts',
resource: ContactResource::class
)
->fields([
Text::make('Contact', 'text'),
])
namespaces
use App\MoonShine\Resources\ContactResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Text;
BelongsToMany::make(
'Contacts',
resource: ContactResource::class
)
->fields([
Text::make('Contact', 'text'),
])
use App\MoonShine\Resources\ContactResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Text;
BelongsToMany::make(
'Contacts',
resource: ContactResource::class
)
->fields([
Text::make('Contact', 'text'),
])
namespaces
use App\MoonShine\Resources\ContactResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Text;
BelongsToMany::make(
'Contacts',
resource: ContactResource::class
)
->fields([
Text::make('Contact', 'text'),
])
use App\MoonShine\Resources\ContactResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Text;
BelongsToMany::make(
'Contacts',
resource: ContactResource::class
)
->fields([
Text::make('Contact', 'text'),
])

В отношении необходимо указать, какие поля pivot используются в промежуточной таблице!
Подробнее в официальной документации Laravel.
Метод creatable()
позволяет создать новый объект отношения через модальное окно.
creatable(
Closure|bool|null $condition = null,
?ActionButton $button = null,
)
creatable(
Closure|bool|null $condition = null,
?ActionButton $button = null,
)
creatable(
Closure|bool|null $condition = null,
?ActionButton $button = null,
)
creatable(
Closure|bool|null $condition = null,
?ActionButton $button = null,
)
creatable(
Closure|bool|null $condition = null,
?ActionButton $button = null,
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable()

Вы можете настроить кнопку создания, передав параметр button в метод.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\ActionButton;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable(
button: ActionButton::make('Custom button', '')
)
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\ActionButton;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable(
button: ActionButton::make('Custom button', '')
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\ActionButton;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable(
button: ActionButton::make('Custom button', '')
)
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\ActionButton;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable(
button: ActionButton::make('Custom button', '')
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\ActionButton;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->creatable(
button: ActionButton::make('Custom button', '')
)
Поле BelongsToMany
может быть отображено в виде выпадающего списка.
Для этого необходимо использовать метод selectMode()
.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()

Все опции выбора доступны для изменения через атрибуты data:
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
->customAttributes([
'data-max-item-count' => 2
])
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
->customAttributes([
'data-max-item-count' => 2
])
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
->customAttributes([
'data-max-item-count' => 2
])
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
->customAttributes([
'data-max-item-count' => 2
])
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->selectMode()
->customAttributes([
'data-max-item-count' => 2
])
Для получения более подробной информации, пожалуйста, обратитесь к Choices.
Метод placeholder()
позволяет установить атрибут placeholder на поле.
placeholder(string $value)
placeholder(string $value)
placeholder(string $value)
placeholder(string $value)
placeholder(string $value)
BelongsToMany::make('Countries', 'countries')
->nullable()
->placeholder('Countries')
BelongsToMany::make('Countries', 'countries')
->nullable()
->placeholder('Countries')
BelongsToMany::make('Countries', 'countries')
->nullable()
->placeholder('Countries')
BelongsToMany::make('Countries', 'countries')
->nullable()
->placeholder('Countries')
BelongsToMany::make('Countries', 'countries')
->nullable()
->placeholder('Countries')
Метод placeholder()
используется только если поле отображается в виде выпадающего списка selectMode()
!
Метод tree()
позволяет отображать значения в виде дерева с чекбоксами, например, для категорий, которые имеют вложенность.
В метод необходимо передать столбец в базе данных, по которому будет строиться дерево.
tree(string $parentColumn)
tree(string $parentColumn)
tree(string $parentColumn)
tree(string $parentColumn)
tree(string $parentColumn)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->tree('parent_id')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->tree('parent_id')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->tree('parent_id')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->tree('parent_id')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->tree('parent_id')

Метод horizontalMode()
позволяет отображать значения в виде горизонтального списка.
horizontalMode(
Closure|bool|null $condition = null,
string $minColWidth = '200px',
string $maxColWidth = '1fr'
)
horizontalMode(
Closure|bool|null $condition = null,
string $minColWidth = '200px',
string $maxColWidth = '1fr'
)
horizontalMode(
Closure|bool|null $condition = null,
string $minColWidth = '200px',
string $maxColWidth = '1fr'
)
horizontalMode(
Closure|bool|null $condition = null,
string $minColWidth = '200px',
string $maxColWidth = '1fr'
)
horizontalMode(
Closure|bool|null $condition = null,
string $minColWidth = '200px',
string $maxColWidth = '1fr'
)
$condition
- (опционально) условие для отображения поля в горизонтальном режиме,
$minColWidth
- (опционально) минимальная ширина колонки,
$maxColWidth
- (опционально) максимальная ширина колонки.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->horizontalMode(true, minColWidth: '100px', maxColWidth: '33%')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->horizontalMode(true, minColWidth: '100px', maxColWidth: '33%')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->horizontalMode(true, minColWidth: '100px', maxColWidth: '33%')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->horizontalMode(true, minColWidth: '100px', maxColWidth: '33%')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->horizontalMode(true, minColWidth: '100px', maxColWidth: '33%')

По умолчанию в preview поле будет отображаться в виде таблицы.

Для изменения отображения в preview можно использовать следующие методы.
onlyCount
Метод onlyCount()
позволяет отображать только количество выбранных значений в preview.
BelongsToMany::make('Categories', resource: CategoryResource::class)
->onlyCount()
BelongsToMany::make('Categories', resource: CategoryResource::class)
->onlyCount()
BelongsToMany::make('Categories', resource: CategoryResource::class)
->onlyCount()
BelongsToMany::make('Categories', resource: CategoryResource::class)
->onlyCount()
BelongsToMany::make('Categories', resource: CategoryResource::class)
->onlyCount()

inLine
Метод inLine()
позволяет отображать значения поля в виде строки.
inLine(string $separator = '', Closure|bool $badge = false, ?Closure $link = null)
inLine(string $separator = '', Closure|bool $badge = false, ?Closure $link = null)
inLine(string $separator = '', Closure|bool $badge = false, ?Closure $link = null)
inLine(string $separator = '', Closure|bool $badge = false, ?Closure $link = null)
inLine(string $separator = '', Closure|bool $badge = false, ?Closure $link = null)
Вы можете передать в метод необязательные параметры:
separator
- разделитель между элементами,
badge
- замыкание или булево значение, отвечающее за отображение элементов в виде бейджа,
$link
- замыкание, которое должно возвращать ссылки url или компонент Link.
При передаче булевого значения true в параметр badge
будет использоваться цвет Primary.
Для изменения цвета отображаемого badge
используйте замыкание и возвращайте компонент Badge::make()
.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\Badge;
use MoonShine\UI\Components\Link;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->inLine(
separator: ' ',
badge: fn($model, $value) => Badge::make((string) $value, 'primary'),
link: fn(Property $property, $value, $field): string|Link => Link::make(
app(CategoryResource::class)->getDetailPageUrl($property->id),
$value
)
)
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\Badge;
use MoonShine\UI\Components\Link;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->inLine(
separator: ' ',
badge: fn($model, $value) => Badge::make((string) $value, 'primary'),
link: fn(Property $property, $value, $field): string|Link => Link::make(
app(CategoryResource::class)->getDetailPageUrl($property->id),
$value
)
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\Badge;
use MoonShine\UI\Components\Link;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->inLine(
separator: ' ',
badge: fn($model, $value) => Badge::make((string) $value, 'primary'),
link: fn(Property $property, $value, $field): string|Link => Link::make(
app(CategoryResource::class)->getDetailPageUrl($property->id),
$value
)
)
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\Badge;
use MoonShine\UI\Components\Link;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->inLine(
separator: ' ',
badge: fn($model, $value) => Badge::make((string) $value, 'primary'),
link: fn(Property $property, $value, $field): string|Link => Link::make(
app(CategoryResource::class)->getDetailPageUrl($property->id),
$value
)
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Components\Badge;
use MoonShine\UI\Components\Link;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->inLine(
separator: ' ',
badge: fn($model, $value) => Badge::make((string) $value, 'primary'),
link: fn(Property $property, $value, $field): string|Link => Link::make(
app(CategoryResource::class)->getDetailPageUrl($property->id),
$value
)
)

Метод relatedLink()
позволит отобразить отношение в виде ссылки с количеством элементов.
Ссылка будет вести на IndexPage дочернего ресурса из отношения HasMany, в котором буду показаны только данные элементы.
relatedLink(?string $linkRelation = null, Closure|bool $condition = null)
relatedLink(?string $linkRelation = null, Closure|bool $condition = null)
relatedLink(?string $linkRelation = null, Closure|bool $condition = null)
relatedLink(?string $linkRelation = null, Closure|bool $condition = null)
relatedLink(?string $linkRelation = null, Closure|bool $condition = null)
Вы можете передать в метод необязательные параметры:
linkRelation
- ссылка на отношение,
condition
- замыкание или булево значение, отвечающее за отображение отношения в виде ссылки.
Параметр linkRelation
позволяет создать ссылку на отношение с привязкой родительского ресурса.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink('category')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink('category')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink('category')
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink('category')
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink('category')
Параметр condition
через замыкание позволит изменить метод отображения в зависимости от условий.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink(condition: function (int $count, Field $field): bool {
return $count > 10;
})
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink(condition: function (int $count, Field $field): bool {
return $count > 10;
})
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink(condition: function (int $count, Field $field): bool {
return $count > 10;
})
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink(condition: function (int $count, Field $field): bool {
return $count > 10;
})
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->relatedLink(condition: function (int $count, Field $field): bool {
return $count > 10;
})
Метод valuesQuery()
позволяет изменить запрос для получения значений.
valuesQuery(Closure $callback)
valuesQuery(Closure $callback)
valuesQuery(Closure $callback)
valuesQuery(Closure $callback)
valuesQuery(Closure $callback)
use App\MoonShine\Resources\CategoryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->valuesQuery(fn(Builder $query, Field $field) => $query->where('active', true))
namespaces
use App\MoonShine\Resources\CategoryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->valuesQuery(fn(Builder $query, Field $field) => $query->where('active', true))
use App\MoonShine\Resources\CategoryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->valuesQuery(fn(Builder $query, Field $field) => $query->where('active', true))
namespaces
use App\MoonShine\Resources\CategoryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->valuesQuery(fn(Builder $query, Field $field) => $query->where('active', true))
use App\MoonShine\Resources\CategoryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->valuesQuery(fn(Builder $query, Field $field) => $query->where('active', true))
Для реализации асинхронного поиска значений используйте метод asyncSearch()
.
asyncSearch(
string $column = null,
?Closure $searchQuery = null,
?Closure $formatted = null,
?string $associatedWith = null,
int $limit = 15,
?string $url = null,
)
asyncSearch(
string $column = null,
?Closure $searchQuery = null,
?Closure $formatted = null,
?string $associatedWith = null,
int $limit = 15,
?string $url = null,
)
asyncSearch(
string $column = null,
?Closure $searchQuery = null,
?Closure $formatted = null,
?string $associatedWith = null,
int $limit = 15,
?string $url = null,
)
asyncSearch(
string $column = null,
?Closure $searchQuery = null,
?Closure $formatted = null,
?string $associatedWith = null,
int $limit = 15,
?string $url = null,
)
asyncSearch(
string $column = null,
?Closure $searchQuery = null,
?Closure $formatted = null,
?string $associatedWith = null,
int $limit = 15,
?string $url = null,
)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->asyncSearch()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->asyncSearch()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->asyncSearch()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->asyncSearch()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', 'categories', resource: CategoryResource::class)
->asyncSearch()
Поиск будет осуществляться по полю отношения ресурса column
.
По умолчанию column=id
.
Вы можете передать параметры в метод asyncSearch()
:
$column
- поле, по которому осуществляется поиск,
$searchQuery
- функция обратного вызова для фильтрации значений,
$formatted
- функция обратного вызова для настройки вывода,
$associatedWith
- поле, с которым установить связь,
$limit
- количество элементов в результатах поиска,
$url
- url для обработки асинхронного запроса.
use App\MoonShine\Resources\CountryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Countries', 'countries', resource: CountryResource::class)
->asyncSearch(
'title',
10,
searchQuery: function (Builder $query, Request $request, Field $field) {
return $query->where('id', '!=', 2);
},
formatted: function ($country, Field $field) {
return $country->id . ' | ' . $country->title;
},
'https://moonshine-laravel.com/async'
)
namespaces
use App\MoonShine\Resources\CountryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Countries', 'countries', resource: CountryResource::class)
->asyncSearch(
'title',
10,
searchQuery: function (Builder $query, Request $request, Field $field) {
return $query->where('id', '!=', 2);
},
formatted: function ($country, Field $field) {
return $country->id . ' | ' . $country->title;
},
'https://moonshine-laravel.com/async'
)
use App\MoonShine\Resources\CountryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Countries', 'countries', resource: CountryResource::class)
->asyncSearch(
'title',
10,
searchQuery: function (Builder $query, Request $request, Field $field) {
return $query->where('id', '!=', 2);
},
formatted: function ($country, Field $field) {
return $country->id . ' | ' . $country->title;
},
'https://moonshine-laravel.com/async'
)
namespaces
use App\MoonShine\Resources\CountryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Countries', 'countries', resource: CountryResource::class)
->asyncSearch(
'title',
10,
searchQuery: function (Builder $query, Request $request, Field $field) {
return $query->where('id', '!=', 2);
},
formatted: function ($country, Field $field) {
return $country->id . ' | ' . $country->title;
},
'https://moonshine-laravel.com/async'
)
use App\MoonShine\Resources\CountryResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
BelongsToMany::make('Countries', 'countries', resource: CountryResource::class)
->asyncSearch(
'title',
10,
searchQuery: function (Builder $query, Request $request, Field $field) {
return $query->where('id', '!=', 2);
},
formatted: function ($country, Field $field) {
return $country->id . ' | ' . $country->title;
},
'https://moonshine-laravel.com/async'
)
При построении запроса в searchQuery()
вы можете использовать текущие значения формы.
Для этого нужно передать Request
в функцию обратного вызова.
use App\MoonShine\Resources\CityResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
use MoonShine\UI\Fields\Select;
Select::make('Country', 'country_id'),
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->asyncSearch(
'title',
searchQuery: function (Builder $query, Request $request, Field $field): Builder {
return $query->where('country_id', $request->get('country_id'));
}
)
namespaces
use App\MoonShine\Resources\CityResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
use MoonShine\UI\Fields\Select;
Select::make('Country', 'country_id'),
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->asyncSearch(
'title',
searchQuery: function (Builder $query, Request $request, Field $field): Builder {
return $query->where('country_id', $request->get('country_id'));
}
)
use App\MoonShine\Resources\CityResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
use MoonShine\UI\Fields\Select;
Select::make('Country', 'country_id'),
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->asyncSearch(
'title',
searchQuery: function (Builder $query, Request $request, Field $field): Builder {
return $query->where('country_id', $request->get('country_id'));
}
)
namespaces
use App\MoonShine\Resources\CityResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
use MoonShine\UI\Fields\Select;
Select::make('Country', 'country_id'),
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->asyncSearch(
'title',
searchQuery: function (Builder $query, Request $request, Field $field): Builder {
return $query->where('country_id', $request->get('country_id'));
}
)
use App\MoonShine\Resources\CityResource;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
use MoonShine\UI\Fields\Field;
use MoonShine\UI\Fields\Select;
Select::make('Country', 'country_id'),
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->asyncSearch(
'title',
searchQuery: function (Builder $query, Request $request, Field $field): Builder {
return $query->where('country_id', $request->get('country_id'));
}
)
Запросы должны быть настроены с использованием метода asyncSearch()
.
Не используйте valuesQuery()
!
Для установления связи значений выбора между полями можно использовать метод associatedWith()
.
associatedWith(string $column, ?Closure $searchQuery = null)
associatedWith(string $column, ?Closure $searchQuery = null)
associatedWith(string $column, ?Closure $searchQuery = null)
associatedWith(string $column, ?Closure $searchQuery = null)
associatedWith(string $column, ?Closure $searchQuery = null)
$column
- поле, с которым устанавливается связь,
searchQuery
- функция обратного вызова для фильтрации значений.
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->associatedWith('country_id')
namespaces
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->associatedWith('country_id')
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->associatedWith('country_id')
namespaces
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->associatedWith('country_id')
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', 'cities', resource: CityResource::class)
->associatedWith('country_id')
Для более сложной настройки вы можете использовать asyncSearch()
.
Метод withImage()
позволяет добавить изображение к значению.
withImage(
string $column,
string $disk = 'public',
string $dir = ''
)
withImage(
string $column,
string $disk = 'public',
string $dir = ''
)
withImage(
string $column,
string $disk = 'public',
string $dir = ''
)
withImage(
string $column,
string $disk = 'public',
string $dir = ''
)
withImage(
string $column,
string $disk = 'public',
string $dir = ''
)
$column
- поле с изображением,
$disk
- диск файловой системы,
$dir
- директория относительно корня диска.
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', resource: CityResource::class)
->withImage('thumb', 'public', 'countries')->selectMode()
namespaces
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', resource: CityResource::class)
->withImage('thumb', 'public', 'countries')->selectMode()
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', resource: CityResource::class)
->withImage('thumb', 'public', 'countries')->selectMode()
namespaces
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', resource: CityResource::class)
->withImage('thumb', 'public', 'countries')->selectMode()
use App\MoonShine\Resources\CityResource;
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
BelongsToMany::make('Cities', resource: CityResource::class)
->withImage('thumb', 'public', 'countries')->selectMode()

Метод buttons()
позволяет добавить дополнительные кнопки к полю BelongsToMany
.
buttons(array $buttons)
buttons(array $buttons)
buttons(array $buttons)
buttons(array $buttons)
buttons(array $buttons)
use App\MoonShine\Resources\CategoryResource;
use MoonShine\UI\Components\ActionButton;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->buttons([
ActionButton::make('Check all', '')
->onClick(fn() => 'checkAll', 'prevent'),
ActionButton::make('Uncheck all', '')
->onClick(fn() => 'uncheckAll', 'prevent')
])
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\UI\Components\ActionButton;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->buttons([
ActionButton::make('Check all', '')
->onClick(fn() => 'checkAll', 'prevent'),
ActionButton::make('Uncheck all', '')
->onClick(fn() => 'uncheckAll', 'prevent')
])
use App\MoonShine\Resources\CategoryResource;
use MoonShine\UI\Components\ActionButton;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->buttons([
ActionButton::make('Check all', '')
->onClick(fn() => 'checkAll', 'prevent'),
ActionButton::make('Uncheck all', '')
->onClick(fn() => 'uncheckAll', 'prevent')
])
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\UI\Components\ActionButton;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->buttons([
ActionButton::make('Check all', '')
->onClick(fn() => 'checkAll', 'prevent'),
ActionButton::make('Uncheck all', '')
->onClick(fn() => 'uncheckAll', 'prevent')
])
use App\MoonShine\Resources\CategoryResource;
use MoonShine\UI\Components\ActionButton;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->buttons([
ActionButton::make('Check all', '')
->onClick(fn() => 'checkAll', 'prevent'),
ActionButton::make('Uncheck all', '')
->onClick(fn() => 'uncheckAll', 'prevent')
])
withCheckAll
Метод withCheckAll()
позволяет добавить кнопку checkAll к полю BelongsToMany
, аналогично предыдущему примеру.
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->withCheckAll()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->withCheckAll()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->withCheckAll()
namespaces
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->withCheckAll()
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Laravel\Fields\Relationships\BelongsToMany;
BelongsToMany::make('Categories', resource: CategoryResource::class)
->withCheckAll()