我正在尝试使用 laravel 微风开发一个简单的自由职业平台。当我尝试在自由职业者和管理员之间实现按摩功能时(工作由管理员而不是客户发布)我收到此错误。
Illuminate\Database\Eloquent\Relations\BelongsToMany::save():参数 #1 ($model) 必须是 Illuminate\Database\Eloquent\Model 类型,给定 null,在 C:\Users\user\freelance_graphicwebefef\app\ 中调用第 23 行的 Http\Controllers\ThreadController.php
线程模型
class Thread extends Model
{
use HasFactory;
use SoftDeletes;
public function Users(){
return $this->belongsToMany('App\Models\User');
}
public function Messages(){
return $this->hasMany('App\Models\Message','thread_id');
}
public function Job(){
return $this->belongsTo('App\Models\Job');
}
}
用户模型
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Laratrust\Traits\LaratrustUserTrait;
class User extends Authenticatable
{
use LaratrustUserTrait;
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function role(){
return $this->belongsTo('App\Models\Role');
}
public function hasRoleCustom($Role){
return null !== $this->role()->where('name',$Role)->first();
}
public function jobs(){
return $this->hasMany('App\Models\Job','user_id');
}
public function Favorites(){
return $this->hasMany('App\Models\Favorites');
}
public function Threads(){
return $this->belongsToMany('App\Models\Thread');
}
public function Message(){
return $this->hasMany('App\Models\Message','user_id');
}
}
线程控制器
class ThreadController extends Controller
{
public function createThread(Request $request){
$this->validate($request,[
'job_id'=>'required|integer'
]);
$Thread=new Thread;
$Thread->job_id=$request->input('job_id');
$Thread->save();
$Freelancer=Auth::user();
$Admin=$Thread->Job->user;
$Thread->Users()->save($Freelancer);//**line 22**
$Thread->Users()->save($Admin);//**line 23**
return redirect('/threads/'.$Thread->id);
}
public function createMessage(Request $request,$id){
$this->validate($request,[
'message'=>'required|string',
]);
$Message=new Message();
$Message->message=$request->input('message');
$Message->thread_id=$id;
$User=Auth::user();
$User->Message()->save($Message);
return redirect('/threads/'.$id)->with('success','Message Saved');
}
public function showThread($id){
$Thread=Thread::find($id);
return view('threads.show')->with('Thread',$Thread);
}
}
PHPStorm 在第 22 行给了我这个消息
$Thread->Users()->save($Freelancer);
提供了 '\Illuminate\Database\Eloquent\Model'、'\Illuminate\Contracts\Auth\Authenticatable' 类型的预期参数
Thread Table 和 thread_users 表显示了一些记录。