Merhabalar
Baum eklentisi ile sınırsız dil ve sınırsız menuye sahip web sayfası yapmak istiyorum. Bunun için aşağıdaki gibi bir veritabanı yapısı oluşturdum ancak ilişkilendirme işlemini bir türlü yapamadım.
tek dil seçeneği varken menuler tablosunda menu_adi alanı vardı ve bu alanı baum eklentisinin node.php dosyasındaki
getNestedList fonksiyonunu biraz değiştirerek
getNestedListCustom ile aşağıdaki gibi kullanabiliyordum. (Bildiğiniz gibi getNestedList fonksiyonu tüm ağacı sıralı bir şekilde tek bir dizi haline dönüştürmektedir. Ancak dizi içerisinde sadece isim alanını bulunmakta. Ben biraz modifiye ederek
getNestedListCustom fonksiyonunu yazdım ve geri dönen dizi içerisinde bir dizi daha ekledim ve bu dizi içerisinde ise derinlik,isim ve id alanları bulunmakta. )
Menu.php Modeli
use Baum\Node;
class Menu extends Node {
protected $table = 'menuler';
protected $guarded = array('id', 'parent_id');
public static function getNestedListCustom($column) {
$instance = new static;
$depthColumn = $instance->getDepthColumnName();
$nodes = $instance->newNestedSetQuery()->get()->toArray();
return array_map(function($node) use($depthColumn, $column) {
return array("derinlik" => $node[$depthColumn], "adi" => $node[$column], "id" => $node["id"]);
}, $nodes);
}
}
menuController.php deki listeleme fonksiyonu
public function getListele() {
$menuler = Menu::getNestedListCustom('menu_adi');
return View::make('backend.menu.listele', array('menuler' => $menuler));
}
tek dil seçeneği varken buraya kadar sorunsuz çalışmaktaydı. Ancak sınırsız dil seçeği için menuler tablosundaki menu_adi,menu_icerigi,menu_link alanlarını menuler_lang tablosuna taşıyıp iki tabloyu birbirine bağlayınca, menuler_lang tablosunu da language tablosuna bağlayınca laravelde ilişkilendirme kurabilmek için model dosyasını aşağıdaki gibi değiştirdim.
Menu.php Modeli (modifiyeli)
use Baum\Node;
class Menu extends Node {
protected $table = 'menuler';
protected $guarded = array('id', 'parent_id');
public function menuDil()
{
return $this->belongsTo('MenuLang','menu_id','id');
}
public static function getNestedListCustom($column) {
$instance = new static;
$depthColumn = $instance->getDepthColumnName();
$nodes = $instance->newNestedSetQuery()->get()->toArray();
return array_map(function($node) use($depthColumn, $column) {
return array("derinlik" => $node[$depthColumn], "adi" => $node[$column], "id" => $node["id"]);
}, $nodes);
}
}
MenuLang.php modeli
class MenuLang extends Eloquent {
protected $table = 'menuler_lang';
}
menuController.php
public function getListele() {
$menuler = Menu::getNestedListCustom('menu_adi'); //********* burada
return View::make('backend.menu.listele', array('menuler' => $menuler));
}
velhasilikelam menuController da getNestedListCustom fonksiyonunu böyle kullanınca
Undefined index: menu_adi
diye bir hata almaktayım.
böyle bir yapıda menuControllerda getNestedList yada benim yaptığım getNestedListCustom foksiyonu nasıl çağırılır ? Menuler tablosu ile menuler_lang tablosu laravelde nasıl ilişkilendirilir ?
not:
MenuControllerda aşağıdaki gibi bir çağrı null değeri döndürmektedir.
$menu = Menu::findOrFail(1);
dd($menu->menuDil);