Laravel přidat více dat do kontingenční tabulky

0

Otázka

enter image description here

PIVOT TABLE

| post_id | food_id | post_gram |
|:----    |:------: | -----:    |
| 1       | 5       | NULL      |
| 1       | 6       | NULL      |
| 1       | 20      | NULL      |

Ahoj, mám tabulku, Post a Jídlo a kontingenční tabulky food_post, když chci uložit data do kontingenční tabulky uloží pouze id příspěvku a jídlo id ale post_gram dont(nastaví hodnotu na NULL).. v blade mám vybrat vstup vyberte jídlo select=jméno"select2[]" a vstupní napsat, kolik gramů vyberte=název"select3[]" a pak tlačítko, které kopíruje to tak, že uživatel může přidat, kolik chce , já třeba to, že při ukládání dat do kontingenční tabulky hodnota g je uložen a není null v db, v modelu budu definovat "withPivot" já jsem se také zkusit připojit() a to hází chybu, že říct "Pole na řetězec konverze"

---------------**BLADE** ----------------
<div class="flex my-5" id="duplicater">

       <select name="select2[]"  id="select">
           <option disabled selected>Vyberte prosím potravinu</option>
           @foreach ($food as $f )
           <option value="{{$f->id}}">{{$f->nazev}}</option>
           @endforeach
       </select>

       <div>
           <input id="food" type="text" name="select3[]" value="" placeholder="Počet gramů">
       </div>
   </div>

   </div>

<button type="submit" class="uppercase mt-15 bg-gray-900 text-gray-100 text-lg font-bold py-4 px-20 rounded-2xl ">Submit Post</button>
</form>
<button id="button" class="p-3 my-6 border-green-400 border text-green-400" onclick="duplicate()">Přidat další potravinu</button> 
--------------**Post Controller**----------------

public function store(Request $request)
   {
       //dd($request->select2);
       $data = [];

       $request->validate([
           'title' => 'required',
           'description' => 'required',
           'image' => 'required|mimes:jpg,png,jpeg|max:5048'
       ]);

       $newImageName = uniqid() . '-' . $request->title . '.' . $request->image->extension();

       $request->image->move(public_path('images'), $newImageName);



       $post = new Post();
       $post->title = $request->input('title');
       $post->description = $request->input('description');
       $post->slug = SlugService::createSlug(Post::class, 'slug', $request->title);
       $post->image_path =$newImageName;
       $post->user_id = auth()->user()->id;

       $post->save();
         

-----------------------------------------------------------------------------
         -----------here is the attach to the pivot table -------------
-----------------------------------------------------------------------------
           $post->food()->sync($request->select2,[
       'post_gram' => $request->select3
           ]);


       return redirect('/blog')
           ->with('message', 'Your post has been added!');
   }

-------------------------příspěvek model----------------------------

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Cviebrock\EloquentSluggable\Sluggable;
use Laravelista\Comments\Commentable;

class Post extends Model
{
   use HasFactory;
   use Sluggable;
   use Commentable;


       protected $fillable = ['title','slug' ,'description' , 'image_path', 'user_id'];

   public function user(){
           return $this->belongsTo(User::class);
   }
   public function food(){
       return $this->belongsToMany(Food::class)->withPivot('post_gram');//->withPivot(['post_kalorie','post_bilkoviny','post_sacharidy','post_tuky','post_objem']);
   }
   public function sluggable():array{
       return[
           'slug'=>[
               'source' => 'title'
           ]
       ];
   }
}
laravel php pivot
2021-11-21 17:07:02
1

Nejlepší odpověď

0

Název sloupce je post_gram

V modelu

Změnit

public function food(){
   return $this->belongsToMany(Food::class)->withPivot('post_objem');
}

K

public function food(){
   return $this->belongsToMany(Food::class)->withPivot('post_gram');
}

A v regulátoru

použití sync pomocník, jak je uvedeno níže

$post->food()->sync([$request->select2,$request->select3]);

NEBO

použití attach pomocník, jak je uvedeno níže

$post->food()->attach([$request->select2,$request->select3]);
2021-11-24 10:23:01

Ahoj, změním model a řadič post_gram a stále nic ://
Pepa Zdepa

Můžete zobrazit model z kontingenční tabulky?
Leena Patel

<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class FoodPost extends Model { use HasFactory; }
Pepa Zdepa

použití sync pomocník jak na své upravené odpověď. prosím, zkontrolujte, zda
Leena Patel

jsem to zkusit, ale to hází error ` SQLSTATE[42S22]: Sloupec nebyl nalezen: 1054 Unknown column '0' in 'field list' (SQL: insert into food_post (food_id, post_id, 0) values (0, 55, 9)) `
Pepa Zdepa

jsem také se snaží, $post->jídlo()->sync(['food_id'=>$request->select2,'post_gram'=>$request->select3]); ale to ještě hodit stejnou chybu
Pepa Zdepa

zkuste použít attach()
Leena Patel

stále stejná chyba ://
Pepa Zdepa

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................