خطا در ایجاد و ذخیره دیتا

- 4 ماه پیش
توسط حسین حسین پور آپدیت شد
محمد ( 2177 تجربه )
5 ماه پیش

سلام دسوتان من موقع ذخیره این مشکل دارم

"SQLSTATE[HY000]: General error: 1364 Field 'category_id' doesn't have a default value (SQL: insert into `posts` (`title`, `description`, `tags`, `user_id`, `slug`, `body`, `images`, `updated_at`, `created_at`) values
بهترین پاسخ انتخاب شده توسط محمد
حسین حسین پور
5 ماه پیش

فیلد هایی که مقدار پیش فرض نمی گیرن رو یک متد nullable بهشون در migration وصل کنید به این شکل.

$table->integer('category_id')->unsigned()->nullable();
reza kazemi ( 695 تجربه )
5 ماه پیش

سلام فیلد category_id رو در جدول یا nullable کن یا هم یک مقدار default براش تعریف کن

arshiya saeidi ( 3719 تجربه )
5 ماه پیش

مقدار پیشفرض یا default فیلد category_id آیدی رو برابر NULL

محمد ( 2177 تجربه )
5 ماه پیش

اینجوری نوشتم ارور داره:

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('category_id')->unsigned();
            $table->boolean('approved')->default(0);
            $table->string('title');
            $table->string('slug');
            $table->text('description');
            $table->text('body');
            $table->text('images');
            $table->text('tags');
            $table->unsignedInteger('like')->default(0);
            $table->integer('viewCount')->default(0);
            $table->integer('commentCount')->default(0);
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');

        });

    }

@arshiya73arshiya
@reza.kazemi

محمد ( 2177 تجربه )
5 ماه پیش

اینم کد کنترولر

public function store(PostRequest $request)
    {

        $imagesUrl = $this->uploadImages($request->file('images'));

        $posts = new Post();
        $posts->title = $request->title;
        $posts->description = $request->description;
        $posts->tags = $request->tags;
        $posts->user_id = Auth()->user()->id;
        $posts->slug = str_replace(' ', '-', $request->title);
        $posts->body = $request->body;
        $posts->images = $imagesUrl;
        $posts->save();
        $posts->categories()->attach(1);

        alert()->success('عملیات مورد نظر با موفقیت انجام شد','ذخیره شد');
        return redirect(route('posts.index'));
    }
محمد ( 2177 تجربه )
5 ماه پیش

@reza.kazemi
@arshiya73arshiya
منظور اینطوریه:

<?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->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('category_id')->unsigned();
            $table->boolean('approved')->default(0);
            $table->string('title');
            $table->string('slug');
            $table->text('description');
            $table->text('body');
            $table->text('images');
            $table->text('tags');
            $table->unsignedInteger('like')->default(0);
            $table->integer('viewCount')->default(0);
            $table->integer('commentCount')->default(0);
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

        });
        Schema::create('category_post', function (Blueprint $table) {
            $table->integer('post_id')->unsigned()->default(0);
            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade')->onUpdate("cascade");

            $table->integer('category_id')->unsigned()->default(0);
            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate("cascade");

            $table->primary(['post_id' , 'category_id']);
        });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}
حسین حسین پور ( 3226 تجربه )
5 ماه پیش

فیلد هایی که مقدار پیش فرض نمی گیرن رو یک متد nullable بهشون در migration وصل کنید به این شکل.

$table->integer('category_id')->unsigned()->nullable();
Saeed Karimi ( 215 تجربه )
4 ماه پیش

سلام
در این پستی که ایجاد میکنید باید مشخس باشه که کدوم دسته بندی رو داره پس نمیتونه nullable یا default باشه و باید مقدار بگیره.
بهترین راه اینه که توی ویوت یک تگ select ایجاد کنی و name اون برابر category_id باشه که مقادیرش با مقادیر دسته بندیت پر بشه و زمانی که درخواست ارسال شد مقدار اون select رو بدی به category_id

<select class="form-control" name="category_id" id="category_id">
                            @foreach($categories as $key =>$category)
                                <option value="{{ category->id}}">{{ $category->یname }}</option>
                            @endforeach
                        </select>
محمد ( 2177 تجربه )
4 ماه پیش

من این ارور را دارم

BadMethodCallException
Method Illuminate\Database\Query\Builder::attach does not exist.

آیا در ارتباط one to many باید attach کرد

public function store(PostRequest $request)
    {

        $imagesUrl = $this->uploadImages($request->file('images'));

        $posts = new Post();
        $posts->title = $request->title;
        $posts->description = $request->description;
        $posts->tags = $request->tags;
        $posts->user_id = Auth()->user()->id;
        $posts->slug = str_replace(' ', '-', $request->title);
        $posts->body = $request->body;
        $posts->images = $imagesUrl;
        $posts->save();
        $posts->category()->attach(1);        

         alert()->success('عملیات مورد نظر با موفقیت انجام شد','ذخیره شد');
        return redirect(route('posts.index'));
    }

@saeedkarimi454
@hhp14111
@reza.kazemi

Saeed Karimi ( 215 تجربه )
4 ماه پیش

شما باید در جدول posts یک فیلد به اسم category_id داشته باشید که به عنوان کلید خارجی از جدول categories قرار میگیریه.
شما category_id مه دریافت میکنید رو میریزید داخل این فیلد.

در categories
$this->integer("category_id"(->references('id'(->on("categories('->;
$posts->category_id = $request->category_id;
محمد ( 2177 تجربه )
4 ماه پیش

این ارور را دارم در آپدیت

Creating default object from empty value

این متد آپدیت من هست

public function update(Request $request,Post $post)
    {
        $file = $request->file('images');
        $inputs = $request->except('category');

        if($file) {
            $inputs['images'] = $this->uploadImages($request->file('images'));
        } else {
            $inputs['images'] = $post->images;
            $inputs['images']['thumb'] = $inputs['imagesThumb'];

        }

        unset($inputs['imagesThumb']);
        $post->images = $inputs['images'];
        $posts->category_id = $request->category_id; 
        $post->update($inputs);
        return redirect(route('posts.index'));
    }

@saeedkarimi454
@hhp14111
@reza.kazemi

حسین حسین پور ( 3226 تجربه )
4 ماه پیش

@manvfx
این ارور داره خودش میگه مشکل از چیه یعنی دارین یه property رو اختصاص میدین به object ی که تعریف نشده. البته خطش هم گفته که شما ننوشتین . خودتون راحت میتونین ببینین کدوم آبجکت هستش.
اگر route model binding رو درست انجام داده باشین باید ایراد از این خط باشه.

$posts->category_id = $request->category_id;

که احتمالا هدف شما این بوده که $post رو آپدیت کنین ولی اشتباهی نوشتین $posts

برای ارسال پاسخ باید وارد سایت شوید