Как добавить user_id в форму создания

Я изучаю красноречивые отношения и хочу создать пост для конкретного пользователя. Я хочу добавить User_Id в форму создания

Ниже приведены мои фрагменты кода:

@extends('layouts.app')
@section('content')
<div class = "container">
    <form method = "post" action = "{{route('articles.store')}}">
    @csrf
        <input type = "hidden" name = "user_id" value = "{{ Auth::user()->id }}">
        <div class = "form-group">
            <label>Başlık</label>
            <input class = "form-control" name = "title" placeholder = "Başlık">
        </div>
        @if ($errors->has('title'))
            <span class = "text-danger">
                {{$errors->first('title')}}
            </span>
        @endif
        <div class = "form-group">
            <label>Post İçeriği</label>
            <textarea class = "form-control" name = "body" placeholder = "İçerik" rows = "3"></textarea>
        </div>
        @if ($errors->has('body'))
            <span class = "text-danger">
                {{$errors->first('body')}}
            </span>
        @endif
        <button  type = "submit" class = "btn btn-primary">Kaydet</button>
     </form>
    </div>
@endsection

и моя модель статьи такая;

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

 class Article extends Model
{
   protected $fillable=[
  'title','body','user_id'
];

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

}

А вот и мой контроллер;

public function store(ArticleRequest $request)
{
    Auth::user();
    $article =  new Article();
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');

    $article->save();

    return redirect()->route('articles.index');
}

Но в конце я получаю ошибку ниже:

 SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a 
   default value (SQL: insert into `articles` (`title`, `body`, `updated_at`, 
  `created_at`) values (Merhaba, Bu post id değeri 1 olan user tarafından 
   yazıldı., 2018-05-03 06:55:45, 2018-05-03 06:55:45))
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
1 592
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

public function store(ArticleRequest $request)
{
    Auth::user();
    $article =  new Article();
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');

$article ->user_id=$request->get('user_id'); // add this line

    $article->save();

    return redirect()->route('articles.index');
}

Это небезопасно, люди могут публиковать сообщения от имени других пользователей, изменяя скрытое входное значение. Посмотрите на ответ @Tanvir ниже, который предлагает лучшее решение.

Tuim 03.05.2018 09:38

Да @Tuim, ты прав. Я опубликовал этот ответ в соответствии с шаблоном лезвия, имеющим содержимое. В противном случае лучше взять идентификатор пользователя из Auth :: user ();

Saroj 03.05.2018 10:35

Вы получаете пользователя в

$user = Auth::user();

используйте этот идентификатор

$article -> user_id = $user->id;

public function store(ArticleRequest $request)
{
    $user = Auth::user();
    $article =  new Article();
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');
    $article -> user_id = $user->id;


    $article->save();

    return redirect()->route('articles.index');
}

Или же

иначе вы можете получить user_id в почтовом запросе из формы (для этого вы можете использовать скрытое поле для user_id в своей форме) и просто передать его

$article -> user_id=$request->get('user_id');
Ответ принят как подходящий

Вы можете получить текущий идентификатор пользователя, вошедшего в систему, из процедуры аутентификации пользователя в магазине.

public function store(ArticleRequest $request)
{
    Auth::user();
    $article =  new Article();
    $article -> user_id=Auth::user()->id;
    $article -> title=$request->get('title');
    $article -> body=$request->get('body');

    $article->save();

    return redirect()->route('articles.index');
}

Вы можете отправить идентификатор пользователя вместе с другими данными публикации, как это делали другие ответы. Но раз уж вы изучаете, как работают красноречивые отношения, почему бы не использовать их для сохранения модели статьи.

Создайте взаимосвязь статей внутри модели User:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{  
   .........
   .........

   // Since user can have many articles, then i assumed you need
   // hasMany relationship here, otherwise please change accordingly.
   public function articles()
   {
     return $this->hasMany(Article::class);
   }

} 

И в вашем контроллере (он автоматически добавит внешний ключ к модели Article):

public function store(ArticleRequest $request)
{

  $user = Auth::user();

  $user->articles()->create($request->only(
     'title',
     'body'
  ));

  return redirect()->route('articles.index');
}

И, наконец, удалите поле ввода user_id из формы (больше не нужно, так как статья будет сохранена отношениями аутентифицированной модели User):

<!-- remove this -->
<input type = "hidden" name = "user_id" value = "{{ Auth::user()->id }}"> 

Другие вопросы по теме