programing

[App\Post]에서 대량 할당을 허용하도록 채우기 가능한 속성에 [제목] 추가

itmemos 2023. 8. 10. 18:18
반응형

[App\Post]에서 대량 할당을 허용하도록 채우기 가능한 속성에 [제목] 추가

Mysql에 데이터를 삽입하는 동안 다음 오류가 발생했습니다.

"[App\Post]에서 대량 할당을 허용하려면 채우기 가능한 속성에 [제목]을 추가하십시오."

내 코드는 다음과 같습니다.

$post = Post::create([
'title' => $request->input('title'),
'body' => $request->input('body')
]);

다른 방법으로 데이터를 삽입하면 정상적으로 작동합니다.다음 코드는 정상적으로 작동합니다.

//Create Post
$post = new Post;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
   

코드의 상위 부분에서 오류가 발생하는 이유를 설명할 수 있는 사람이 있습니까?

모델의 채우기 배열에 제목을 추가합니다. 포스트(Post)를 통해 대량의 메소드를 생성하여 저장할 수 있습니다.

protected $fillable = ['title'];

protected $fillable = ['title'];다음과 같습니다.

protected $guarded = [];  

내부에 아무것도 정의할 필요 없이 빈 배열로 둡니다.은 와정대니다입의 입니다.$fillable데이터베이스에 당신이 내부에서 지정한 필드를 제외한 모든 것을 수락하라고 말하는 것과 같습니다.$guardedvmdk

$fillable 모두에 대해

protected $guarded = ['id']; 

대량 할당의 경우 모델(App\Post)에서 "채우기 가능한 배열"을 정의해야 합니다.

따라서 모델은 다음과 같아야 합니다.

    class Post extends Model
    {

        protected $fillable = ['title','body']; //<---- Add this line
// ... 
}

추가 정보:[https://laravel.com/docs/5.7/eloquent#mass-assignment ][1]

모델의 채우기 배열에 제목을 추가합니다.

protected $fillable = ['title'];

모델에 변수를 선언하지 않았기 때문에 이 오류가 발생했습니다. 클래스에서 변수를 그렇게 정의해야 합니다.

protected $fillable = ['title'];

모든 라벨 모델을 만들 때 채울 수 있는 특성이 없습니다.

필드 데이터를 승인하고 데이터베이스에 삽입할 수 있도록 하려면 먼저 모델에서 허용해야 합니다.

게시 모델에서 다음 행을 추가합니다.

protected $fillable = ['title'];

파티에 늦었지만 이런 문제가 있었고 해결책은 전혀 달랐습니다.

PostController에서 auth를 확인하고 다음을 찾았습니다.

Post::where('slug', $oldSlug)->first()->update([
            'image_url' => $request->image_url,
            'slug' => $newSlug,
            'title' => $request->title,
            'body' => $request->body,
            'description' => $request->description,
            'user_id' => auth()->user()->id,
            'catagory' => $request->catagory,
        ]);

나는 왜 그것이 "image_url"을 좋아하지 않는지 이해하려고 노력하면서 "대량 할당을 허용하기 위해 채우기 가능한 속성에 ['image_url' 추가"를 외쳤습니다.

나는 내가 그것을 추가했다는 것을 깨달았습니다.->first()게시물을 하나만 받는 것을 확실히 하기 위해, 하지만 모든 슬러그가 유일하다는 것이 검증되고 검증되었기 때문에, 나는 그것을 떨어뜨렸습니다.->first().

Post::where('slug', $oldSlug)->update([
        'image_url' => $request->image_url,
        'slug' => $newSlug,
        'title' => $request->title,
        'body' => $request->body,
        'description' => $request->description,
        'user_id' => auth()->user()->id,
        'catagory' => $request->catagory,
    ]);

마법처럼, 효과가 있습니다.

좀 더 고도의 지식을 가진 사람이 그것이 왜 효과가 있었는지 설명할 수 있다면, 저는 알고 싶습니다.감사합니다!

당신의 포스트 모델에는, 다음이 있을 것입니다.$fillable추가해야 하는 배열 변수입니다.

자세한 정보:"대량 배정"은 라라벨어로 무엇을 의미합니까?

한 가지 문제를 방지하기 위한 최선의 방법

Post::create($request->except('_token'));

여기에서 문서를 확인

또는 생성 방법을 사용하여 단일 PHP 문을 사용하여 새 모델을 "저장"할 수 있습니다.삽입된 모델 인스턴스(instance)는 다음과 같은 생성 방법으로 반환됩니다.

use App\Models\Flight;

$flight = Flight::create([
    'name' => 'London to Paris',
]);

그러나 생성 방법을 사용하기 전에 모델 클래스에 채우기 가능한 속성이나 보호된 속성을 지정해야 합니다.이러한 속성은 기본적으로 모든 Enholder 모델이 대량 할당 취약성으로부터 보호되기 때문에 필요합니다.

Laravel 9 - [App\Post]에서 대량 할당을 허용하도록 채우기 가능한 속성에 [제목] 추가 - 오류

모델에 정의된 "채우기 가능한 배열" 대량 할당의 경우(App\Post)

따라서 포스트 모델은 다음과 같아야 합니다.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;
    protected $fillable = ['title','body','excerpt','is_published','image_path','is_published','min_to_read'];
}

나한테 효과가 있었어요!

언급URL : https://stackoverflow.com/questions/53793841/add-title-to-fillable-property-to-allow-mass-assignment-on-app-post

반응형