【发布时间】:2021-06-22 18:25:15
【问题描述】:
- Laravel 版本:8.12
- Nova 版本:3.22.0
- PHP 版本:7.4.2
- 网络服务器
artisan serve
感觉就像我错过了 Laravel Nova 中必不可少的东西。 我有两个模型,我希望它们作为 Nova 资源,它们之间有关系。它们的模型称为“模板”和“资产”,其中一个“模板”有许多“资产”。
模型中没有逻辑,只有两个简单的模型,带有文本字段等简单资源。
当我查看或编辑模板时,我得到:
"message": "Call to a member function tap() on null",
"exception": "Error",
"file": "laravel\\nova\\src\\Query\\Builder.php",
"line": 265,
- 重新创建具有不同名称的模型和资产。
- 我在
php artisan clear:cache和composer dump之间每次更改。 - 我创建了一个新模型 + 资源,并改为附加到用户模型/资源,效果与预期一致。所以我将用户与模板进行了比较,但我没有发现任何不同(除了用户是可验证的)
- 删除并重新安装了供应商文件夹。
- 清除所有未使用的代码
模板模型(Models/Template.php):
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Template extends Model
{
use HasFactory;
protected $casts = [
'published_at' => 'datetime',
];
public function assets() {
$this->hasMany(Asset::class);
}
}
模板资源(Nova/Template.php):
<?php
namespace App\Nova;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Fields\Text;
//use Laravel\Nova\Fields\Image;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\HasMany;
class Template extends Resource
{
public static $model = \App\Models\Template::class;
public static $title = 'title';
public static $search = [
'title',
];
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Title'),
Text::make('Slug'),
Text::make('Content'),
//Image::make(__('Featured Image')),
DateTime::make('Will be published at', "published_at")->format("YYYY-MM-DD HH:MM:SS"),
Text::make('Source'),
Text::make('Composition'),
HasMany::make('Assets')
];
}
public function cards(Request $request){
return [];
}
public function filters(Request $request){
return [];
}
public function lenses(Request $request){
return [];
}
public function actions(Request $request){
return [];
}
}
资产模型(Models/Asset.php):
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Asset extends Model
{
public function template() {
return $this->belongsTo(Template::class);
}
}
以及资产资源(Noca/Asset.php):
<?php
namespace App\Nova;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\BelongsTo;
class Asset extends Resource
{
public static $model = \App\Models\Asset::class;
public static $title = 'id';
public static $search = [
'id',
];
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Property', 'property'),
Text::make('Value', 'value'),
BelongsTo::make('Template')
];
}
public function cards(Request $request){
return [];
}
public function filters(Request $request){
return [];
}
public function lenses(Request $request){
return [];
}
public function actions(Request $request){
return [];
}
}
但我仍然遇到同样的错误。我很快就要发疯了,为此我投入了很多时间。
我错过了什么?
完整的跟踪:
"trace": [
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Query\\Builder.php",
"line": 196,
"function": "applyQueryCallbacks",
"class": "Laravel\\Nova\\Query\\Builder",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Http\\Requests\\ResourceIndexRequest.php",
"line": 30,
"function": "paginate",
"class": "Laravel\\Nova\\Query\\Builder",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Http\\Controllers\\ResourceIndexController.php",
"line": 20,
"function": "searchIndex",
"class": "Laravel\\Nova\\Http\\Requests\\ResourceIndexRequest",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php",
"line": 54,
"function": "handle",
"class": "Laravel\\Nova\\Http\\Controllers\\ResourceIndexController",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php",
"line": 45,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
"line": 254,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
"line": 197,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 693,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 128,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Http\\Middleware\\Authorize.php",
"line": 18,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Laravel\\Nova\\Http\\Middleware\\Authorize",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Http\\Middleware\\BootTools.php",
"line": 20,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Laravel\\Nova\\Http\\Middleware\\BootTools",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Http\\Middleware\\DispatchServingNovaEvent.php",
"line": 20,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Laravel\\Nova\\Http\\Middleware\\DispatchServingNovaEvent",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\SubstituteBindings.php",
"line": 50,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\Middleware\\Authenticate.php",
"line": 44,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Http\\Middleware\\Authenticate.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Laravel\\Nova\\Http\\Middleware\\Authenticate",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php",
"line": 78,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php",
"line": 49,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\View\\Middleware\\ShareErrorsFromSession",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php",
"line": 121,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php",
"line": 64,
"function": "handleStatefulRequest",
"class": "Illuminate\\Session\\Middleware\\StartSession",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Session\\Middleware\\StartSession",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse.php",
"line": 37,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\EncryptCookies.php",
"line": 67,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Cookie\\Middleware\\EncryptCookies",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 103,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 695,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 670,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 636,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 625,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
"line": 166,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 128,
"function": "Illuminate\\Foundation\\Http\\{closure}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\nova\\src\\Http\\Middleware\\ServeNova.php",
"line": 27,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Laravel\\Nova\\Http\\Middleware\\ServeNova",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php",
"line": 21,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php",
"line": 21,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php",
"line": 27,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance.php",
"line": 86,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\fruitcake\\laravel-cors\\src\\HandleCors.php",
"line": 37,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Fruitcake\\Cors\\HandleCors",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\fideloper\\proxy\\src\\TrustProxies.php",
"line": 57,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Fideloper\\Proxy\\TrustProxies",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 103,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
"line": 141,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
"line": 110,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\public\\index.php",
"line": 52,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "D:\\kod\\project\\laravel\\server.php",
"line": 21,
"function": "require_once"
}
]
【问题讨论】:
标签: laravel laravel-nova