Php 在null上调用成员函数create()
我知道这个题目和其他题目一样,但我找不到合适的答案。这是我的问题 我正在尝试在插入用户数据后将数据插入到另一个表中。但我得到的是对null上的成员函数create()的Php 在null上调用成员函数create(),php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我知道这个题目和其他题目一样,但我找不到合适的答案。这是我的问题 我正在尝试在插入用户数据后将数据插入到另一个表中。但我得到的是对null上的成员函数create()的调用 这是我的AuthController.php代码 protected function create(array $data) { $user = User::create([ 'name' => $data['name'], 'email' => $data['email
调用
这是我的AuthController.php代码
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$user->usersbasics()->create([
'user_id' => $user->id,
]);
return $user;
}
这是我的用户模型
public function usersbasics()
{
$this->hasOne('App\UsersBasics');
}
以下是我的UsersBasics模型:
public function user()
{
$this->belongsTo('App\User');
}
我尝试了var\u dumb($user->usersbasics())
,结果为空。
我的代码怎么了?因为我在我的其他工作中也使用同样的方法,这很好。请有人给我解释一下,给我一个解决办法。请
谢谢,您需要在您的用户模型中设置参数filleble
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}
您的控制器方法受保护,而不是公共的
如果您查看现有的AuthController,我们有您提到的功能:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
然后使用postRegister(public,因此可以从routes.php调用)调用此方法,其中我们只传递来自请求的输入作为参数
public function postRegister(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
}
$user = $this->create($request->all());
return redirect($this->redirectPath());
}
我假设您试图直接从控制器调用create()方法,但该方法不起作用,因为它受到保护,只能从类本身内部调用。如果您真的想让create()方法在没有postRegister的情况下工作,您可以执行以下操作:
public function create(Request $request)
{
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
]);
$user->usersbasics()->create([
'user_id' => $user->id,
]);
return $user;
}
然后在routes.php中调用它
Route::post('urlToPostMethod', 'Auth\AuthController@create');
另一种通常更好的方法是将其称为
Route::post('urlToPostMethod', 'Auth\AuthController@postRegister');
这是一个迟来的答案,但我遇到了同样的问题
您的两个关系上都没有return关键字
public function user()
{
return $this->belongsTo('App\User');
}
及
这为我解决了问题。您是否包括/使用用户
模型?然后更改为什么?是的,我在AuthControllerThanks中使用该用户:)也缺少“return”
public function usersbasics()
{
return $this->hasOne('App\UsersBasics');
}