Как добавить user_id в форму создания - PullRequest
0 голосов
/ 03 мая 2018

Я изучаю красноречивые отношения и хочу создать пост для конкретного пользователя. Я хочу добавить 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))

Ответы [ 4 ]

0 голосов
/ 03 мая 2018

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

Создание отношения товара внутри 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 }}"> 
0 голосов
/ 03 мая 2018

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

$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');
0 голосов
/ 03 мая 2018

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

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');
}
0 голосов
/ 03 мая 2018
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'); // добавить эту строку

    $article->save();

    return redirect()->route('articles.index');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...