سلام من میخام برای محصولات و مقالاتم تگ ایجاد کنم ساختار دیتابیسش رو ایجاد کردم به این صورت
public function up()
{
Schema::create('tags', function (Blueprint $table) {
$table->id();
$table->string('tag_name');
$table->timestamps();
});
Schema::create('taggables', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('tag_id');
$table->unsignedBigInteger('taggable_id');
$table->unsignedBigInteger('taggable_type');
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('CASCADE');
$table->timestamps();
});
}
اینم روابط هست
class Tag extends Model
{
protected $fillable = ['tag_name' , 'tag_id' , 'taggable_id' , 'taggable_type'];
public function articles()
{
return $this->morphedByMany(Article::class , 'taggable');
}
public function products()
{
return $this->morphedByMany(Product::class , 'taggable');
}
}
public function tags()
{
return $this->morphToMany(Tag::class , 'taggable');
}
توی فرم create مقالاتم یه اینپوت برای تایپ تگ هی مدنظرم گذاشتم به این صورت
الان موقعی که مقاله ذخیره میشه توی ذخیره سازی تگ ها مشکل دارم ممنون میشم کمک کنید بهم اینم کدهای بخش استور و ویو
public function store(ArticleRequest $request , ArticleRepository $articleRepository)
{
$this->authorize('create' , Article::class);
if ($request->hasFile('image')) {
$imagePath = $request->file('image');
$imageName = $imagePath->getClientOriginalName();
$dir = 'articles';
$path = $imagePath->storeAs($dir, $imageName, 'public');
}
$article = Article::create([
'title' => $request->title,
'slug' => $request->slug,
'body' => $request->body,
'user_id' => auth()->id(),
'image' => $path
]);
$article->categories()->sync($request->categories);
$article->comments()->create([
'body' => $request->body,
'user_id' => auth()->id(),
'parent_id' => $request->parent_id
]);
$article->tags()->create([
'tag_name' => $request->tag_name,
'taggable_id' => $article->id,
'taggable_type' => get_class($article),
]);
return redirect(route('articles.index'));
}
<div class="control-group form-group">
<label class="form-label"> برچسپ ها </label>
<input name="tag_name[]" id="tagSelect" multiple class="form-control" value="{{old('tag_ids')}}" >
</div>
سلام
بنده تمام کدهاتون رو کامل نخوندم و نمیدونم جای دیگه ایش هم نیاز به اصلاح داره یا نه... ولی در یک نگاه کلی اوکی بود و باز هم اگر شک داشتید میتونید از مستندات خود لاراول برای این بحث استفاده کنید. (اتفاقا مثالی که خودش هم زده دقیقا بحث tag هاست):
اما یک موردی که به چشمم میاد این بخش هست:
$article->tags()->create([
'tag_name' => $request->tag_name,
'taggable_id' => $article->id,
'taggable_type' => get_class($article),
]);
اینکه تا جایی که میدونم شما نباید (یا نیازی نیست) خودتون taggable_type و taggable_id رو بهش بدید. بلکه این کار وقتی دارید از Eloquent Relation ها استفاده میکنید خودش بصورت اتومات انجام میشه.
باز هم اگر ارور وجود داشت لازم هست که متن ارورتون رو ارسال کنید. اون طوری راحت تر میشه متوجه اشکال اصلی شد.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟