سلام دسوتان من موقع ذخیره این مشکل دارم
"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
فیلد هایی که مقدار پیش فرض نمی گیرن رو یک متد nullable بهشون در migration وصل کنید به این شکل.
$table->integer('category_id')->unsigned()->nullable();
اینجوری نوشتم ارور داره:
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');
});
}
اینم کد کنترولر
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'));
}
@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');
}
}
فیلد هایی که مقدار پیش فرض نمی گیرن رو یک متد nullable بهشون در migration وصل کنید به این شکل.
$table->integer('category_id')->unsigned()->nullable();
سلام
در این پستی که ایجاد میکنید باید مشخس باشه که کدوم دسته بندی رو داره پس نمیتونه 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>
من این ارور را دارم
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'));
}
شما باید در جدول posts یک فیلد به اسم category_id داشته باشید که به عنوان کلید خارجی از جدول categories قرار میگیریه.
شما category_id مه دریافت میکنید رو میریزید داخل این فیلد.
در categories
$this->integer("category_id"(->references('id'(->on("categories('->;
$posts->category_id = $request->category_id;
این ارور را دارم در آپدیت
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'));
}
@manvfx
این ارور داره خودش میگه مشکل از چیه یعنی دارین یه property رو اختصاص میدین به object ی که تعریف نشده. البته خطش هم گفته که شما ننوشتین . خودتون راحت میتونین ببینین کدوم آبجکت هستش.
اگر route model binding رو درست انجام داده باشین باید ایراد از این خط باشه.
$posts->category_id = $request->category_id;
که احتمالا هدف شما این بوده که $post رو آپدیت کنین ولی اشتباهی نوشتین $posts
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟