Решением вашей проблемы является использование метода ->take(1)
. Есть еще методы, применимые к запросам, но вот список доступных методов , которые вы можете запустить на экземпляре коллекции. Я полагаю, что Builder ожидает, что области вернут запрос {[a collection of models]}
. Я потратил некоторое время на тестирование, и, по моему мнению, это может быть просто недостатком в конструкции Плагин Builder.
Теперь, прежде чем вы посмотрите на мое исследование ниже. Я бы сказал, что вы должны научиться создавать свои собственные компоненты , как предлагает Хардик в комментарии. Надеюсь, что все это поможет.
Итак, вот область, которую я имею для плагина:
public function scopeFilterTypes($query) {
return $query->whereNotIn('slug', [
'range',
'close',
'all',
'single',
'three',
'five',
'self'
])->first();
}
Вот изображение моей бэкэнд-формы, которая правильно видит только один элемент в отношениях (это вот почему я использую область видимости):
![enter image description here](https://i.stack.imgur.com/Dz2XU.png)
Теперь посмотрите на это изображение компонента моего компоновщика. Вы можете видеть, что он даже игнорирует мой ->whereNotIn([])
метод по запросу:
![enter image description here](https://i.stack.imgur.com/9aISj.png)
Чтобы доказать мои выводы об этом недостатке в компоненте компоновщика, я делаю метод find($id)
, который возвращает экземпляр модели не коллекция моделей. Использование метода find($id)
также дает мне правильный результат в форме бэкэнда, но в списке Builder отображаются все записи, которые являются неправильными.
Однако, когда я изменяю область действия на ->take(1)
:
public function scopeFilterTypes($query) {
return $query->whereNotIn('slug', [
'range',
'close',
'all',
'single',
'three',
'five',
'self'
])->orderBy('created_at','desc')->take(1);
}
Я получаю это в форме бэкэнда; работает правильно: ![enter image description here](https://i.stack.imgur.com/YdAhW.png)
И я получаю это из списка строителей:
![enter image description here](https://i.stack.imgur.com/2ocyV.png)