2016-02-22 2 views
-1

Я знаю, что это тот же самый заголовок, что и другие, но я не могу найти правильный ответ для меня. Вот моя проблема.Вызов функции-члена create() по нуле

Я пытаюсь вставить данные в другую таблицу после ввода данных пользователя. Но у меня есть Call to a member function create() on null.

Вот мой код 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_dumb($user->usersbasics()) и результат нулевой. Что у меня с моим кодом? потому что я использую то же самое для своей другой работы, и это прекрасно. Пожалуйста, объясните мне и дайте мне решение. Пожалуйста ..

спасибо,

+0

Вы включаете/используете модель 'User'? – Daan

+0

А потом измените к чему?Да, я использую пользователя в моем AuthController – RK26

ответ

1

Вы должны установить параметры fillable в модели пользователя.

class User extends Model 
{ 
    protected $fillable = ['name', 'email', 'password']; 
} 
+0

Уже установлен «заполняемый» – RK26

0

Ваш метод контроллера защищен, а не публичный.

Если посмотреть на существующую AuthController, мы имеем функцию вы упомянули:

protected function create(array $data) 
{ 
    return User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 
} 

Этот метод вызывается с postRegister (общественной, так что он может быть вызван из 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()); 
} 

Я предполагаю, что вы пытались вызвать метод создания() непосредственно от контроллера, который не работает, потому что она защищена и может быть вызвана только внутри самого класса. Если вы действительно хотите, чтобы создать() метод работы без 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\[email protected]'); 

Другой, как правило, лучше способ было бы называть это вместо этого

Route::post('urlToPostMethod', 'Auth\[email protected]'); 
2

Это поздний ответ, но я столкнулся с той же проблемой.

У вас нет ключевого слова return на обеих ваших отношениях.

public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

и

public function usersbasics() 
{ 
    return $this->hasOne('App\UsersBasics'); 
} 

Это fixxed для меня.

+0

Спасибо за это :) отсутствовал «возврат» тоже –