J'ai une erreur:

"Essayer d'obtenir la propriété 'id' d'un non-objet (vue: C:
xampp \ htdocs \ klikdesaku \ resources \ views \ admin \ posts \ create.blade.php) "

Je l'avais utilisé sans forme collective laravel (je ne connais pas son nom)

Exemple: {{!! Form::select() !!}}

Voici mon code:

create.blade.php

@foreach ($categories as $category )
   <option value="{{$category->id}}">{{$category->name}}</option>

PostController.php

public function create(){
        $this->authorize('create', Post::class);
        $categories = Category::pluck('name','id')->all();
        return view ('admin.posts.create', ['categories'=>$categories]);
    }

public function store(){
        $this->authorize('create', Post::class);
        $inputs = request()->validate([
            'title'=>'required',
            'post_image'=>'file', //mime: jpeg, png
            'body'=>'required',
            'category_id'=> 'required'
        ]);
        if(request('post_image')){
            $inputs['post_image'] = request('post_image')->store('images');
        }
        auth()->user()->posts()->create($inputs);
        session()->flash('post-create-message', 'Post was Created ' . $inputs['title']);
        return redirect()->route('post.index');
0
Mahardika Widya Kurniawan 24 févr. 2021 à 10:06

2 réponses

Meilleure réponse

Lorsque vous appelez pluck, vous tirez une colonne, 'nom', puis indexez cette valeur par une clé, dans ce cas 'id' (le deuxième argument). Lorsque vous appelez all sur la collection renvoyée, vous obtenez le tableau associatif sous-jacent. Donc, votre champ 'id' est la clé et la catégorie 'nom' est la valeur:

@foreach ($categories as $id => $name)
   <option value="{{ $id }}">{{ $name }}</option>
@endforeach

Même si vous n'avez pas appelé all et que vous avez la collection de pluck, cela fonctionnerait toujours bien.

Laravel 8.x Docs - Base de données - Générateur de requêtes - Récupération d'une liste de valeurs de colonne pluck

Laravel 8.x Docs - Collections - Méthodes disponibles - all

1
lagbox 24 févr. 2021 à 07:36
  public function create(){

        $this->authorize('create', Post::class);
        $categories = Category::->all(['name','id']);
        return view ('admin.posts.create')->with(['categories'=>$categories])
        
}
0
DOLWIN DAVIS 24 févr. 2021 à 07:19