Laravel 5

inversion de données dans table Pivot

  • Avatar de TechNov
    Membre depuis :
    31/01/2015
    Messages :
    12

    Bonsoir, Vous allez bien j'espere.
    J'ai deux tables "Categories" et "Tags" avec des relation Many-To-Many d'ou une table Pivot "Category_Tags".
    Lors des enregistrement, dans les tables Categories et "Tags", tout se psse bien.
    Mais dans ma table "Category_Tags ( id,category_id, tag_id) les id des catégories sont enregistrés dans tag_id et les id des tags sont enregistrés dans category_id.
    Je ne sais pas ce que j'ai du faire "d'inverssant"...

    model Category

    class Category extends Model
    {
    protected $table = 'categories';

    protected $fillable = [
    // ...
    ];

    protected $casts = [
    //...
    ];
    //...

    public function tags()
    {
    return $this->belongsToMany(Tags::class, 'category_tags','tag_id','category_id');
    }
    / // non appelé mais execute quand le model est instancié dans le ResourceRepository.php
    public function setPasswordAttribute($name)
    {
    $this->attributes['name'] = strtoupper($name);
    }
    /

    }

    Model Tags

    class Tags extends Model
    {
    /*
    The attributes that are mass assignable.

    @var array
    */
    protected $fillable = [
    'tag','url'
    ];

    public function categories()
    {
    return $this->belongsToMany(Category::class, 'category_tags','category_id', 'tag_id');
    }
    }

    Model Category_Tag

    class Category_Tag extends Model
    {
    //
    protected $table="category_tags";

    protected $filiable=['tag_id','category_id'];

    public function tags()
    {
    return $this->belongsToMany(Tags::class, 'category_tags','category_id', 'tag_id');
    }

    public function categories()
    {
    return $this->belongsToMany(Category::class, 'category_tags','category_id', 'tag_id');
    }
    }

    TagRepository ( ou l'enregistrement dans Tags et category_tags )

    class TagRepository
    {
    protected $model;
    public function __construct(Tags $tag)
    {
    $this->model=$tag;
    }

    public function storeTags($category, $tags)
    {

    $tags=explode( ' ', $tags);

    foreach ($tags as $tag)
    {
    $tag=trim($tag);

    $tag_url=Str::slug($tag);
    //$tag_url = str_slug($tag, "-");
    $exist_tag=$this->model->where('tags.url',$tag)->first();
    if(is_null( $exist_tag))
    {
    $exist_tag=new $this->model([
    'url'=>$tag_url,
    'tag'=>$tag
    ]);
    $category->tags()->save($exist_tag);//create and attach with TablePivot post_tag ( tapble associative entre cat et tag)
    }
    else
    {
    $category->tags()->attach($exist_tag->id);//attach with TablePivot post_tag ( tapble associative entre cat et tag)
    }
    }
    }

    public function updateTags($category, $tags)
    {
    $category->tags()->detach();

    $this->storeTags($category, $tags);
    }
    }

    capture de la table category_tags
    Image

    les id 38 devraient etre dans category_id et non dans tag_id et vis versa.
    Une aide SVP

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2524

    Salut,

    Essaie comme ça :

    public function tags()
    {
    return $this->belongsToMany(Tags::class, 'category_tags','category_id','tag_id');
    }

    Mais comme c'est conventionnel ça doit aussi passer comme ça :

    public function tags()
    {
    return $this->belongsToMany(Tags::class, 'category_tags');
    }
  • Avatar de TechNovIT
    Membre depuis :
    24/12/2014
    Messages :
    3

    Merci Bestmomo, dans le model category,
    j'ai mis return $this->belongsToMany(Tags::class, 'category_tags','tag_id',' category_id');
    au lieu de
    return $this->belongsToMany(Tags::class, 'category_tags','category_id','tag_id');

    ça marche bien.

  • Avatar de TechNovIT
    Membre depuis :
    24/12/2014
    Messages :
    3

    Merci Bestmomo, dans le model category,
    j'ai mis return $this->belongsToMany(Tags::class, 'category_tags','tag_id',' category_id');
    au lieu de
    return $this->belongsToMany(Tags::class, 'category_tags','category_id','tag_id');

    ça marche bien.

Vous ne pouvez pas répondre à ce sujet.