Ben şöyle özet geçeyim. Kodunuzdan taglarla alakalı pek bir şey çıkaramadım çünkü. Etiketleri explode ile parçalayıp trim ile temizleyip validate edip (artık nasıl ayırıp yakalıyorsanız her birini, orası size kalmış) slug hali olan $etiket değişkeni var ve $category_id var diyelim elimizde;
Önce Category ile Tag ları pivot tanımlamalısınız. Misal, Category e Tag ları bağlayacaksınız, şöyle olmalı:
app/models/category.php
//category.php de
public function tags() {
return $this->belongsToMany('Tag','category_tags');
}
bundan sonra
Category::with('tags')->get();
gibi bir kullanımda tags nesnesi içinde etiketler döner.
Şimdi de etiketleri kategorilere bağlayalım:
app/models/tag.php:
public function categories() {
return $this->belongsToMany('Category','category_tags');
}
Şimdi artık
Tag::with('categories')->whereSlug('etiket')->first();
gibi bir kullanımda etiket tagına sahip tüm kategoriler tag ın categories objesi altındadır.
pivot tablo yapısı da şöyle kaba taslak:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCategoryTagsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('category_tags', function(Blueprint $table)
{
$table->increments('id');
$table->integer('category_id')->unsigned()->default(0);
$table->integer('tag_id')->unsigned()->default(0);
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('question_tags');
}
}
Sonra attach() ve detatch() ile pivota veri ekleyebilir, çıkartabilirsiniz.
$kagegori_id deki kategoriye $etiket tagını eklemek için:
Category::find($kategori_id)->tags()->attach($etiket_id);
$kategori_id deki kategoriden $etiket tagını çıkartmak için
Category::find($kategori_id)->tags()->detatch($etiket_id);
$kategori_id deki kategorideki tüm etiketleri silmek için
Category::find($kategori_id)->tags()->detatch();
Hatta bu yolla tersten de gidebiliriz

:
$etiket slugına sahip etikete $kategori_id yi bağlamak için:
Tag::whereSlug($etiket)->categories()->attach($category_id);
Bu kodun şundan aslında hiçbir farkı yok:
Category::find($category_id)->tags()->attach($etiket);
withPivot, withTimestamps gibi daha farklı metodları da var. Ayrıca çoklu ekleme, silme vs. için sync() de kullanabilirsiniz. Temel için bunlar yeterli olacaktır sanırım.
Kitabımın Chapter 8'inde baya değindim bu konuya, teker teker neden bunları yazdığımı açıkladım. Eğer satın aldıysanız orada ön sipariş süreci biterse daha bi detaylarını bulabilirsiniz.