Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在null上调用成员函数create()_Php_Laravel_Laravel 5.2 - Fatal编程技术网

Php 在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

我知道这个题目和其他题目一样,但我找不到合适的答案。这是我的问题

我正在尝试在插入用户数据后将数据插入到另一个表中。但我得到的是对null上的成员函数create()的
调用

这是我的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');
}