Laravel Nova не находит некоторые модели

#php #laravel #laravel-nova

#php #laravel #laravel-nova

Вопрос:

С некоторыми моделями, когда я создаю для них новый ресурс Nova, кажется, что Nova не может найти модель, потому что они не отображаются на боковой панели (я не могу связаться с ними также по URL, что дает мне 404). Но это происходит только для определенных моделей, и если я попытаюсь изменить целевую модель в Ресурсе на другую (отредактировав переменную $model), она работает и показывает ресурс на боковой панели (но с неправильной моделью). Nova не выдает мне никаких ошибок, поэтому отладка становится безумно сложной.

Модели, которые не работают в моем проекте, называются «Продукт» и «Компания».

Я использую Laravel 7.28.3, Nova 3.9.1, MariaDB 10.4.11 и PHP 7.4.1 с Homestead.

Вот код ресурса продукта:

 <?php

namespace AppNova;

use IlluminateHttpRequest;
use LaravelNovaFieldsID;
use LaravelNovaHttpRequestsNovaRequest;

class Product extends Resource
{
    /**
     * The model the resource corresponds to.
     *
     * @var string
     */
    public static $model = AppProduct::class;

    /**
     * The single value that should be used to represent the resource when being displayed.
     *
     * @var string
     */
    public static $title = 'title';

    /**
     * The columns that should be searched.
     *
     * @var array
     */
    public static $search = [
        'id', 'name'
    ];

    /**
     * Get the fields displayed by the resource.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
        ];
    }

    /**
     * Get the cards available for the request.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function cards(Request $request)
    {
        return [];
    }

    /**
     * Get the filters available for the resource.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function filters(Request $request)
    {
        return [];
    }

    /**
     * Get the lenses available for the resource.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function lenses(Request $request)
    {
        return [];
    }

    /**
     * Get the actions available for the resource.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function actions(Request $request)
    {
        return [];
    }
}
  

И вот код модели:

 <?php

namespace App;

use IlluminateDatabaseEloquentModel;
use SpatieMediaLibraryHasMedia;
use SpatieMediaLibraryInteractsWithMedia;

class Product extends Model implements HasMedia
{
    use InteractsWithMedia;

    public function visits()
    {
        return visits($this);
    }

    public function user() {
        return $this->belongsTo('AppUser');
    }

    public function company() {
        return $this->belongsTo('AppCompany');
    }

    public function productVariety() {
        return $this->belongsTo('AppProductVariety', 'product_variety_id');
    }

    public function productSpecies() {
        return $this->belongsTo('AppProductSpecies', 'product_species_id');
    }

    public function productNutrients() {
        return $this->hasMany('AppProductNutrient');
    }

    public function baseProduct() {
        return $this->hasOne('AppProduct', 'base_product_id');
    }

    public function recipes() {
        return $this->hasMany('AppRecipe', 'base_product_id');
    }

    protected $fillable = [
        'user_id', 'company_id', 'imageline_id', 'products_species_id', 'products_varieties_id', 'base_product_id',
        'name', 'scientific_name', 'production_start', 'production_end', 'production_city', 'description', 'story', 'curiosities', 'advices', 'quantity_advices', 'why_good', 'who_good',
        'is_base_product', 'show_related_recipes', 'show_related_products'
    ];

}
  

Комментарии:

1. composer dumpautoload ?

Ответ №1:

Проверьте AuthServiceProvider , включена app/Providers/AuthServiceProvider.php ли политика, установленная для этой модели. Затем в вашем классе политики (вероятно ProductPolicy , который привязан к Product модели, проверке view и viewAny методам, эти методы должны возвращать true или условно true .

Комментарии:

1. Я не знал, что Nova автоматически применяет существующие политики. Методы view() и viewAny() не имеют возврата, поэтому это не позволило Nova показать модели.

2. Это работает!! Спасибо