Php Laravel Nova:存储相关文件记录(包含文件路径)的外键
这个问题与拉威尔新星2.5有关 我有一个用户(Nova)资源类,它包含一个“文件”字段。 我不希望文件路径存储在我的users DB表中,而是存储在常规的“files”DB表中 我在Laraval Nova文档中找到了这个代码片段,该文档解释了如何在相关表中存储文件路径。但我不确定如何在我的users表中设置FK字段(file_id)(因为现在,当通过Nova存储用户资源时,该字段保持为空)。我找到的片段来自: 我的用户表如下所示:Php Laravel Nova:存储相关文件记录(包含文件路径)的外键,php,mysql,laravel-nova,laravel-6,Php,Mysql,Laravel Nova,Laravel 6,这个问题与拉威尔新星2.5有关 我有一个用户(Nova)资源类,它包含一个“文件”字段。 我不希望文件路径存储在我的users DB表中,而是存储在常规的“files”DB表中 我在Laraval Nova文档中找到了这个代码片段,该文档解释了如何在相关表中存储文件路径。但我不确定如何在我的users表中设置FK字段(file_id)(因为现在,当通过Nova存储用户资源时,该字段保持为空)。我找到的片段来自: 我的用户表如下所示: id(原始密钥) 文件id(无符号整数) 用户名(varc
- id(原始密钥)
- 文件id(无符号整数)
- 用户名(varchar:255)
- 电子邮件(varchar:255)
- 创建于(日期时间)
- 更新于(日期时间)
- id(原始密钥)
- 原始名称(varchar:255)
- 生成的\u名称(varchar:255)
- 创建于(日期时间)
- 更新于(日期时间)
谢谢。我选择“items”这个名称,而不是命名“files”table,因为table的Nova资源将与“use Laravel\Nova\Fields\File;”同名 您的问题的基本解决方案:
// database\migrations\2019_11_01_103838_create_items_table.php
Schema::create('items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('original_name',255);
$table->string('generated_name',255);
$table->timestamps();
});
// database\migrations\2019_11_01_104145_add_column_item_id_to_users_table.php
Schema::table('users', function (Blueprint $table) {
$table->unsignedBigInteger('item_id')->nullable();
$table->foreign('item_id')->references('id')->on('items');
});
// app\Nova\User.php
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Gravatar::make(),
Text::make('Name')
->sortable()
->rules('required', 'max:255'),
Text::make('Email')
->sortable()
->rules('required', 'email', 'max:254')
->creationRules('unique:users,email')
->updateRules('unique:users,email,{{resourceId}}'),
Password::make('Password')
->onlyOnForms()
->creationRules('required', 'string', 'min:8')
->updateRules('nullable', 'string', 'min:8'),
File::make('Item file')
->store(function (Request $request, $model) {
$oldName = $request->item_file->getClientOriginalName();
$newName = 'user_file_'.$oldName;
// Check file of user is exist or not
$user = \App\User::where('email',$request->email)->first();
if(!$user){
$item = new \App\Item;
$item->original_name = $oldName;
$item->generated_name = $newName;
$item->save();
$model['item_id'] = $item->id;
}else{
$item = \App\Item::find($user->item_id);
if(!$item){
$item = new \App\Item;
$item->original_name = $oldName;
$item->generated_name = $newName;
$item->save();
$model['item_id'] = $item->id;
}else{
$item->original_name = $oldName;
$item->generated_name = $newName;
$item->save();
}
}
// return $newName;
$request->item_file->storeAs('public',$newName);
})
->onlyOnForms(),
Text::make('Item File Id','item_id')->exceptOnForms()
];
}
// app\Observers\UserObserver.php = To delete the variable $model['item_file'] generate by File::make('Item file') in field User Nova resources.
<?php
namespace App\Observers;
use App\User;
class UserObserver
{
public function saving(User $user)
{
unset($user->item_file);
}
}
// app\Providers\AppServiceProvider.php = To register the UserObserver
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Observers\UserObserver;
use App\User;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
User::observe(UserObserver::class);
}
}
//database\migrations\2019\u 11\u 01\u 103838\u create\u items\u table.php
Schema::create('items',函数(Blueprint$表){
$table->bigIncrements('id');
$table->string('original_name',255);
$table->string('generated_name',255);
$table->timestamps();
});
//数据库\migrations\2019\u 11\u 01\u 104145\u添加\u列\u项\u id\u到\u用户\u table.php
Schema::table('users',函数(Blueprint$table){
$table->unsignedBigInteger('item_id')->nullable();
$table->foreign('item_id')->references('id')->on('items');
});
//app\Nova\User.php
公共功能字段(请求$Request)
{
返回[
ID::make()->sortable(),
Gravatar::make(),
Text::make('Name')
->可排序的()
->规则('required','max:255'),
Text::make('Email')
->可排序的()
->规则('必需','电子邮件','最大值:254')
->creationRules('唯一:用户,电子邮件')
->updateRules('unique:users,email,{{resourceId}}'),
密码::make('Password')
->onlyOnForms()
->creationRules('必需'、'字符串'、'最小值:8')
->updateRules('nullable','string','min:8'),
文件::make('项目文件')
->存储(功能(请求$Request$model){
$oldName=$request->item_file->getClientOriginalName();
$newName='user\u file.'$oldName;
//检查用户的文件是否存在
$user=\App\user::where('email',$request->email)->first();
如果(!$user){
$item=new\App\item;
$item->original_name=$oldName;
$item->generated_name=$newName;
$item->save();
$model['item_id']=$item->id;
}否则{
$item=\App\item::find($user->item\u id);
如果(!$项目){
$item=new\App\item;
$item->original_name=$oldName;
$item->generated_name=$newName;
$item->save();
$model['item_id']=$item->id;
}否则{
$item->original_name=$oldName;
$item->generated_name=$newName;
$item->save();
}
}
//返回$newName;
$request->item_file->storeAs('public',$newName);
})
->onlyOnForms(),
Text::make('Item File Id','Item_Id')->exceptOnForms()
];
}
//app\observer\UserObserver.php=删除字段User Nova resources中的变量$model['item_file']generate by file::make('item file')。
// database\migrations\2019_11_01_103838_create_items_table.php
Schema::create('items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('original_name',255);
$table->string('generated_name',255);
$table->timestamps();
});
// database\migrations\2019_11_01_104145_add_column_item_id_to_users_table.php
Schema::table('users', function (Blueprint $table) {
$table->unsignedBigInteger('item_id')->nullable();
$table->foreign('item_id')->references('id')->on('items');
});
// app\Nova\User.php
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Gravatar::make(),
Text::make('Name')
->sortable()
->rules('required', 'max:255'),
Text::make('Email')
->sortable()
->rules('required', 'email', 'max:254')
->creationRules('unique:users,email')
->updateRules('unique:users,email,{{resourceId}}'),
Password::make('Password')
->onlyOnForms()
->creationRules('required', 'string', 'min:8')
->updateRules('nullable', 'string', 'min:8'),
File::make('Item file')
->store(function (Request $request, $model) {
$oldName = $request->item_file->getClientOriginalName();
$newName = 'user_file_'.$oldName;
// Check file of user is exist or not
$user = \App\User::where('email',$request->email)->first();
if(!$user){
$item = new \App\Item;
$item->original_name = $oldName;
$item->generated_name = $newName;
$item->save();
$model['item_id'] = $item->id;
}else{
$item = \App\Item::find($user->item_id);
if(!$item){
$item = new \App\Item;
$item->original_name = $oldName;
$item->generated_name = $newName;
$item->save();
$model['item_id'] = $item->id;
}else{
$item->original_name = $oldName;
$item->generated_name = $newName;
$item->save();
}
}
// return $newName;
$request->item_file->storeAs('public',$newName);
})
->onlyOnForms(),
Text::make('Item File Id','item_id')->exceptOnForms()
];
}
// app\Observers\UserObserver.php = To delete the variable $model['item_file'] generate by File::make('Item file') in field User Nova resources.
<?php
namespace App\Observers;
use App\User;
class UserObserver
{
public function saving(User $user)
{
unset($user->item_file);
}
}
// app\Providers\AppServiceProvider.php = To register the UserObserver
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Observers\UserObserver;
use App\User;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
User::observe(UserObserver::class);
}
}