Merhabalar,
Menu yapısı için oluşturduğum bir yapı var. Create ve Update işlemleri sorunsuz çalışıyor. Ancak silme işleminde hata almaktayım.
Menu yapısı için 3 adet tablo oluşturdum ve modellerini buna göre yazdım. Ancak bir türlü silme işlemini yapamıyorum. Gözden kaçırdığım bir kısım var muhtemelen ancak çözemedim. Kodlarımı iletiyorum.
MenuController dosyamda destroy bölümü ;
$menu = Menu::findOrFail($id);
if ($menu->items->count()) {
$menu->items()->delete();
$menu->items->translations()->delete();
}
$menu->delete();
$request->session()->flash('success', trans('menus.delete.success'));
return response()->json([
'redirect' => route('menus')
]);
Models/Menu.php Dosyam ;
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Menu extends Model
{
use HasFactory;
protected $table = 'menus';
protected $fillable = [
'name'
];
public function items()
{
return $this->hasMany('App\Models\MenuItem', 'menu_id', 'id')->with('translations');
}
}
Models/MenuItem.php Dosyam ;
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class MenuItem extends Model
{
use HasFactory;
protected $table = 'menus_items';
protected $fillable = [
'menu_id',
'parent_id',
'rel',
'class',
'target',
];
public function getLinkAttribute()
{
$link = null;
foreach ($this->translations as $translation){
if($translation->language == LaravelLocalization::getCurrentLocale()){
$link = $translation->link;
break;
}
}
return $link;
}
public function getAnchorAttribute()
{
$anchor = null;
foreach ($this->translations as $translation){
if($translation->language == LaravelLocalization::getCurrentLocale()){
$anchor = $translation->anchor;
break;
}
}
return $anchor;
}
public function getImageAttribute()
{
$image = null;
foreach ($this->translations as $translation){
if($translation->language == LaravelLocalization::getCurrentLocale()){
$image = $translation->image;
break;
}
}
return $image;
}
public function getTranslationsByLanguageAttribute()
{
$translations = null;
foreach ($this->translations as $translation){
$translations[$translation->language] = $translation;
}
return $translations;
}
public function translations()
{
return $this->hasMany('App\Models\MenuItemTranslation', 'item_id', 'id');
}
public function items()
{
return $this->hasMany('App\Models\MenuItem', 'parent_id', 'id')->with('translations');
}
public function scopeNonparenteds($query)
{
return $query->whereNull('parent_id')->get();
}
}
Models/MenuItemTranslation.php Dosyam ;
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MenuItemTranslation extends Model
{
use HasFactory;
protected $table = 'menus_items_translations';
protected $primaryKey = 'translation_id';
protected $fillable = [
'item_id',
'language',
'anchor',
'link',
'title',
'image',
];
}
Aldığım hata ise Method Illuminate\Database\Eloquent\Collection::translations does not exist.
Halbuki translations fonksiyonunu tanımladım aslında. Nerede eksiğim var bulamadım bir türlü. Yardımcı olabilirseniz sevinirim.