mardi 30 avril 2019

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'category_id' cannot be null

I wanted to create a post with categery_id as a dropdown in post/create form, but I'm getting a SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'category_id' cannot be null (SQL: insert into posts (title, body, category_id, author_id, updated_at, created_at)...

I need a little help in finding what is causing this issue and here's what I have so far...

create.blade.php

    @extends('layouts.app')
        @section('content')
         <div class="container">
         <h1>Create Post</h1>
          <div class="row post_row">

       {!! Form::open(['action' => 'PostsController@store', 'method' => 'POST', 'class' => 'form']) !!}
      <div class="col-md-8">           
         <div class'form-group'>
           
           
         </div>
      </div>

      <div class="col-md-4">
        <div class'form-group'>
           
             <select class='form-control' title="category_id">
               @foreach ($categories as $category => $value)
                <option value=""></option>
               @endforeach
            </select>
        </div>
      </div>
</div>

<div class="row post_row">
   <div class="col-md-8">
     <div class'form-group'>
       
       
     </div>
  </div>
</div>

   <div class'form-group' style="padding-top: 20px">
      
      {!! Form::close() !!}
  </div>
</div>  

@endsection

PostController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Post;
use App\Category;


class PostsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    protected $limit = 3;

    public function create()
    {
    $posts = Post::all();
    $categories = Category::all();

    return view('posts.create')->with(['posts' => $posts, 'categories' => $categories]);
}


public function store(Request $request)
    {
        $this->validate($request, [
        'title' => 'required|max:255',
        'body' => 'required'
        ]);
        //create Post
        $post = new Post;
        $post->title = $request->input('title');
        $post->body = $request->input('body');
        $post->category_id = $request->input('category_id');
        $post->author_id = auth()->user()->id;
        $post->save();

    return redirect('/posts')->with('success', 'Your post created created successfully');
}

public function update(Request $request, $id)
{
        $updated = Category::findorFail($id);
        $categories = $request->all();
        $category_id = $request->get('category_id');
        $updated->fill($categories)->save();

    return redirect('/dashboard')->with('success', 'Your post created updated successfully');
}

Post.php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;
use GrahamCampbell\Markdown\Facades\Markdown;

class Post extends Model
{
    //Table Name
protected $table = 'posts';
// Primary Key
public $primaryKey = 'id';
// Timestamps
public $timestamps = true;

protected $fillable = [
    'title',
    'excerpt',
    'body',
    'categery_id',
    'image',

];

protected $dates = ['published_at'];


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

public function category()
{
    return $this->belongsTo(Category::class);
}

public function getImageUrlAttribute($value)
{
$imageUrl = "";

if( ! is_null($this->image))
{
    $imagePath = public_path() . "/img/" . $this->image;

    if(file_exists($imagePath)) $imageUrl = asset("img/" . $this->image);
}

return $imageUrl;

}

public function getDateAttribute()
{
    return is_null($this->published_at) ? '' : $this->published_at->diffForHumans();    
}

public function getExcerptHtmlAttribute()
{
    return $this->excerpt ? Markdown::convertToHtml(e($this->excerpt)) : NULL;
}

public function getBodyHtmlAttribute()
{
    return $this->body ? Markdown::convertToHtml(e($this->body)) : NULL;
}

public function scopeLatestFirst($query)
{
    return $query->orderBy('published_at', 'desc');
}

public function scopePublished($query)
{
    return $query->where('published_at', '<=', Carbon::now());
}

}

Category.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
protected $table = 'categories';

protected $fillable = [
    'title',
    'categery_id'
];

public function posts()
{
    return $this->hasMany(Post::class);
}

public function getRouteKeyName()
{
    return 'slug';
}
}

CreatePostsTable.php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration
{
   /**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('author_id')->unsigned();
        $table->foreign('author_id')->references('id')->on('users')->onDelete('restrict');
        $table->integer('category_id')->unsigned();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('restrict');
        $table->string('title');
        $table->string('slug')->unique();
        $table->text('excerpt');
        $table->mediumText('body');
        $table->string('image')->nullable();
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('posts');
}
}

So here's what I have so far, does anyone see why I'm having this issue?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire