Wyszukiwanie postów po tagu w belongsToMany

0

Witam mam problem z wyciągnięciem danych value jak chce edytować post, nie moge wyciągnąć id które jest juz przepisane dla postu z tagiem z tabeli gdzie jest post = tag.
o to co jak próbowałem, relacja to jest belongstomany z której korzystam dla tej relacji.
kod: z select z view edit.blade:

<select class="form-control tagSelect" name="tag[]" multiple="multiple">
    @foreach ($tag  as $key=>$tag)
      <option value="{{$tag->id}}">{{$tag->name}}</option>
    @endforeach
</select>

skrypt select2 + próba wyciągniecia danych z tabeli

@php
$tag_ids =[];
@endphp

@foreach($post->tags as $tags)
@php
array_push($tag_ids, $tag->id);
@endphp
@endforeach

<script>
  $(document).ready(function() {
    $(".tagsSelect").select2();
    var tags =true;
    var  data = [];
    var  data = <?php echo json_encode($tag_ids);?>;
    $('.tagsSelect').val(data).trigger('change');
  }); 
</script>
0

po pierwsze zamiast foreach i echo to możesz użyć

{{json_encode($post->tags()->pluck('id'))}}

po drugie nie widze pełnego kodu i tabelki więc błąd może być wszędzie nawet źle napisana relacja
po trzecie naucz się używać xdebuga a życie z php stanie się łatwiejsze.

0

@ehhhhh użyłem skróconej wersji przez ciebie co tutaj podałeś, ale teraz mam błąd z bazą gubi mi się z 'id' nie wie który wyciągnąć ma z bazy:

$('.tagsSelect').val([{{json_encode($post->tags()->pluck('id'))}}]).trigger('change');

błąd:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in field list is ambiguous
SELECT `id` FROM `tags` INNER JOIN `post_tag` ON `tags`.`id` = `post_tag`.`tag_id` WHERE `post_tag`.`post_id` = 6

niżej daje model Postu, tag oraz post_tag

Post:

<?php

namespace App\Models;

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

class Post extends Model
{
    use  HasFactory, Sluggable;
   
    public $table = "post";

    protected $fillable = [
        'title', 
        'name'
    	'desc'
        'slug', 
      
    ];
  
    public function Sluggable(): array
    {
        return [
            'slug'=>[
                'source' =>'title'
            ]
        ];
    }
  
    public function tags()
    {
        return $this->belongsToMany(Post::class, post_tag::class, 'post_id','tag_id');
    }
    
 
  public function getRouteKeyName()
   {
       return 'slug';
   }
}

tag:

<?php

namespace App\Models;

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


class Tag extends Model 
{
    use HasFactory;

    public $table = "tags";

    protected $fillable = [
        'name',
    ]; 
}

post_tag

<?php

namespace App\Models;

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

class post_tag extends Model
{
    use HasFactory;

    public $table = "post_tag";

    protected $fillable = [
      'post_id', 'tag_id'
    ];

    public $timestamps = false;

    
}

oraz controller Post edit:

public function edit($id)
{
  $post = Post::findOrFail($id);
  $tagSelect = Tag::all();

  return view('dashboard.post.edit', compact('post', 'tagSelect')
}
0

A znasz sql? Eloquent i query builder to tylko nakładka na sql więc możesz w takim przypadku zamiast id użyć tags.id

0

@ehhhhh wiesz co nie mam błędu już tego ale nie wyciąga danych dalej tagu które sa przepisane pod post, błędu tak samo nie mam w xdebugu

0

czyli masz coś nie tak w innym miejscu. Zainstaluj debugbara, popatrz jakie zapytania się wykonują, przeklej je do phpmyadmina czy workbencha wykonaj i zobacz czy zwracają to co chcesz czy jednak jest w nich błąd.

Przy prawidłowej bazie danych i nazewnictwie powinno działać coś takiego

    public function tags()
    {
        return $this->belongsToMany(Post::class);
    }

bez wypełniania tych kolejnych parametrów

1 użytkowników online, w tym zalogowanych: 0, gości: 1