Laravel执行db:seed时UserSeeder报Call to a member function employees() on bool错误
错误原因
你调用DB::table('users')->insert()方法的返回值是布尔类型(插入成功返回true,失败返回false),并不是User模型的实例,所以你用布尔值调用employees()关联方法自然会抛出该错误。
修复方案
直接改用User模型的create()方法创建用户,该方法会返回新创建的用户模型实例,即可正常调用关联方法:
class UserSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $user = User::create([ 'name' => 'john', 'lastname' => 'davis', 'email' => 'admin@gmail.com', 'phone' => '12345678', 'role'=>'admin', 'password' => Hash::make('12345454'), 'password_status'=>1 ]); $user->employees()->create(['image'=>'image.jpg','address'=>'address']); } }
注意事项
- 请确认
Employees模型的$fillable属性中已添加image和address字段,否则会触发Laravel批量赋值保护错误。 - 如果你确实需要使用DB门面操作,可以先用
insertGetId获取插入用户的ID,再查询得到模型实例后调用关联:
// 插入用户并获取主键ID $userId = DB::table('users')->insertGetId([ 'name' => 'john', 'lastname' => 'davis', 'email' => 'admin@gmail.com', 'phone' => '12345678', 'role'=>'admin', 'password' => Hash::make('12345454'), 'password_status'=>1 ]); // 查询得到用户模型实例 $user = User::findOrFail($userId); // 调用关联创建员工记录 $user->employees()->create(['image'=>'image.jpg','address'=>'address']);
内容的提问来源于stack exchange,提问作者user6085744
相关产品推荐
相关产品推荐

