如何解决在laravel-8中为特定用户上传excel文件一般错误:1364字段'user_id'没有默认值
想法是
- 一个用户有很多数据,但所有数据都属于一个用户
我正在 fasing sqlSTATE[HY000]:一般错误:1364 字段“user_id”没有默认值(sql:插入到
projects
(name
,detail
,{{1} },color
,image
,logo
,updated_at
) 值(shahed,kjfs,fsdkf,fdsfsd,fds,2021-05-30 08:45:35,2021 -05-30 08:45:35)) 错误。 如果你需要更多细节,你可以问 这是我的模型 project.PHP
created_at
这是模型 user.PHP
<?PHP
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
use HasFactory;
protected $fillable = [
'name','detail','image','color','logo','user_id'
];
public function getUser(){
return $this->belongsTo(User::class);
}
}
这是项目表projecttable.PHP
<?PHP
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Jetstream\HasProfilePhoto;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens;
use HasFactory;
use HasProfilePhoto;
use Notifiable;
use TwoFactorAuthenticatable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
public function getProducts(){
return $this->hasMany('App\Models\Product');
}
public function getProject(){
return $this->hasMany('App\Models\Project');
}
// public function products(){
// return $this->hasMany(Product::class);
// }
protected $fillable = [
'name','email','password',];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password','remember_token','two_factor_recovery_codes','two_factor_secret',];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',];
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = [
'profile_photo_url',];
}
这是 importProject.PHP
public function up()
{
Schema::create('projects',function (Blueprint $table) {
// $table->('id');
$table->bigIncrements('id');
$table->string('name',255)->nullable();
$table->string('detail',500)->nullable();
$table->string('color',255)->nullable();
$table->decimal('image',22)->nullable();
$table->decimal('logo',22)->nullable();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->nullable();
});
}
这是 projectController.PHP
public function model(array $row)
{
return new Project([
'name' => $row['name'],'detail' => $row['detail'],'color' => $row['color'],'image' => $row['image'],'logo' => $row['logo'],]);
}
这是 index.blade.PHP
<?PHP
namespace App\Http\Controllers;
use App\Exports\UsersExport;
use App\Models\Project;
use App\Imports\ProjectsImport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ProjectController extends Controller
{
/**
* display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$projects = Project::where('user_id',auth()->user()->id)->latest()->paginate(20);
// $projects = Project::paginate(20);
return view('projects.index',compact('projects'))
->with('i',(request()->input('page',1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('projects.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required','detail' => 'required','color' => 'required','image' => 'required','logo' => 'required',]);
$input = $request->all();
$input['user_id'] = auth()->user()->id;
Project::create($input);
return redirect()->route('project.index')
->with('success','Product created successfully.');
}
/**
* display the specified resource.
*
* @param \App\Models\Project $project
* @return \Illuminate\Http\Response
*/
public function show(Project $project)
{
return view('projects.show',compact('project'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Project $project
* @return \Illuminate\Http\Response
*/
public function edit(Project $project)
{
return view('projects.edit',compact('project'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Project $project
* @return \Illuminate\Http\Response
*/
public function update(Request $request,Project $project)
{
$user_id = Auth::user()->id ;
$request->validate([
'name' => 'required','logo' => 'required'
]);
$input = $request->all();
$project->update($input);
return redirect()->route('project.index')
->with('success','Product updated successfully');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Project $project
* @return \Illuminate\Http\Response
*/
public function destroy(Project $project)
{
$project->delete();
return redirect()->route('projects.index')
->with('success','Project deleted successfully');
}
public function importProject()
{
Excel::import(new ProjectsImport,request()->file('file'));
return back()->with('success','Project created successfully.');
}
public function export()
{
return Excel::download(new UsersExport,'projects.xlsx');
}
}
解决方法
像这样在导入项目中提供 auth 值 :)
public function model(array $row)
{
return new Project([
'name' => $row['name'],'detail' => $row['detail'],'color' => $row['color'],'image' => $row['image'],'logo' => $row['logo'],'user_id' => auth()->user()->id
]);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。