Как вызвать переменные в контроллере Laravel - PullRequest
2 голосов
/ 24 сентября 2019

Я пытаюсь использовать Auth::user()->id; и публиковать их с другой моделью в 'user_id ', поэтому мне не нужно вручную давать пользователям 'user_id'.

Я проверил и включилнеобходимые файлы, и я получаю пользователей "id" из Таблица пользователей

$user_id = Auth::user()->id;
echo $user_id; //this is returning right user "id"

У меня проблемы с вызовом переменных и отправкой их в БД в функциях контроллера, любая помощь будетотлично.

public function store(Request $request)
    {
        $user_id = Auth::user()->id;
        $this->validate($request, [
            'token1' => 'required',
            'token2' => 'required'
        ]);
        $tokens = new Tokens([
            'user_id' => $user_id,
            'token1' => $request->get('token1'),
            'token2' => $request->get('token2')
        ]);
        $tokens->save();
        return view('/home');
    }

Отправьте пользователя "id" из Таблица пользователя в таблицу "user_id" таблицы токенов, чтобы я мог работать с моделями

Получение этой ошибки:

SQLSTATE [23000]: нарушение ограничения целостности: 19 Не выполнено ограничение NOT NULL: tokens.user_id (SQL: вставить в «токены» («token1», «token2», «updated_at», «made_at»)значения (asddsadf, sdfasdf, 2019-09-24 11:53:57, 2019-09-24 11:53:57))

Моя миграция:

    $table->bigIncrements('id');
    $table->integer('user_id');
    $table->string('token1');
    $table->string('token2');
    $table->timestamps();

1 Ответ

0 голосов
/ 24 сентября 2019

Вы должны избегать заполнения user_id таким способом.

Ошибка выдается, потому что user_id не является заполняемым свойством .Но правильный способ справиться с этим - использовать отношения .

. Поэтому я предполагаю, что Tokens имеет отношение belongsTo из-за его внешнего ключа user_id (который в любом случае должен бытьстолбец unsignedInteger), и в вашей модели у вас есть что-то вроде:

public function user() {
  return $this->belongsTo(User::class) 
}

Если вы посмотрите на официальную документацию , вы увидите, что вы должны изменить свой код в этомпуть:

public function store(Request $request)
    {

        $this->validate($request, [
            'token1' => 'required',
            'token2' => 'required'
        ]);

$tokens = new Tokens([
            // 'user_id' => $user_id, This is useless
            'token1' => $request->get('token1'),
            'token2' => $request->get('token2')
        ]);

        // With this method you're going to set the user_id column
        $token->user()->associate(auth()->user());

        $tokens->save();

        return view('/home');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...