Laravel - Les propriétés du modèle restent NULL dans la base de données même après la création
P粉015402013
P粉015402013 2024-02-25 19:07:40
0
2
340

J'ai un modèle appelé Articles qui contient trois propriétés : 'title', 'subtitle' et 'body', il fonctionne parfaitement mais quatre colonnes sont ajoutées au modèle ('subtitle2', 'body2', 'subtitle3' et 'body3' '), les colonnes nouvellement ajoutées restent vides après la création de l'article. Il me manque clairement quelque chose, mais je n'arrive pas à comprendre quoi.

C'est la migration :

public function up()
{
    Schema::table('articles', function (Blueprint $table) {
        $table->string('subtitle2')->nullable()->default(null);
        $table->text('body2')->nullable()->default(null);
        $table->string('subtitle3')->nullable()->default(null);
        $table->text('body3')->nullable()->default(null);
        
    });
}

Après la migration, j'ai édité app/Http/Models/Article.php et cela ressemble à ceci :

protected $fillable = [
    'title',
    'subtitle',
    'body',
    'subtitle2',
    'body2',
    'subtitle3',
    'body3',

];

Ceci est mon application/Http/Livewire/CreateArticle.php

class CreateArticle extends Component
{
use WithFileUploads;

public $title;
public $subtitle;
public $body;
public $category;

public $subtitle2;
public $body2;

public $subtitle3;
public $body3;

public $temporary_images;
public $images = [];

public $article;
    
    
    public function store()
    {
        $this->validate();

        
        $this->article = Category::find($this->category)->articles()->create($this->validate());
        
        $this->article->user()->associate(Auth::user());
        $this->article->save();
        
        if(count($this->images)){
            foreach($this->images as $image){
                $newImage = $this->article->images()->create(['path'=>$image->store('images', 'public')]);
                
                dispatch(new ResizeImage($newImage->path, 600, 400));
            }
            
        }          
}

Finalement, j'ai ajouté ces lignes au formulaire :

{{-- INSERT SUBTITLE 2 --}}
    
    <div class="mb-3">
        <label for="subtitle2" class="form-label">第二段副标题</label>
        <input type="text" wire:model="subtitle2" class="form-control" id="subtitle2">
       
    </div>
    
    
    {{-- INSERT PARAGRAPH 2 --}}
    
    <div class="mb-3">
        <label for="body2" class="form-label">第二段</label><br>
        <textarea class="form-control" wire:model="body2" id="body2" cols="30" rows="3"></textarea>
    </div>
    
    
    {{-- INSERT SUBTITLE 3 --}}
    
    <div class="mb-3">
        <label for="subtitle3" class="form-label">第三段副标题</label>
        <input type="text" wire:model="subtitle3" class="form-control" id="subtitle3">
        
    </div>
    
    
    {{-- INSERT PARAGRAPH 3 --}}
    
    <div class="mb-3">
        <label for="body3" class="form-label">第三段</label><br>
        <textarea class="form-control" wire:model="body3" id="body3" cols="30" rows="3"></textarea>
    </div>

dd($this); renvoie le contenu suivant

Tinker affiche toutes les colonnes

P粉015402013
P粉015402013

répondre à tous(2)
P粉342101652

Supposons que l'image dd();que vous fournissez soit à jour. Je vois que la nouvelle colonne n'existe pas dans la base de données. ('subtitle2', 'body2', 'subtitle3' et 'body3') Tous ces éléments ne sont pas disponibles dans la liste. Je pense donc que vous avez oublié d'exécuter la commande de migration

php artisan migrate
P粉864872812

Vous devez préciser

protected $rules

peut être utilisé

$this->validate()
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal