Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

alexteie's avatar

Kalnoy Nestedset

I installed kalnoy nestedset on laravel 7.x

but when i use it the beforeNode or $node->afterNode($relative)->save(); wont do anything? even when i call Model::fixTree()?

Here's my Model and controller?

Model:

Page.php

0 likes
4 replies
alexteie's avatar

heres my model

namespace Package\CMS;

use Illuminate\Support\Facades\Cache; use Illuminate\Database\Eloquent\Model; use Laratrust\Traits\LaratrustUserTrait; use Illuminate\Database\Eloquent\SoftDeletes; use Kalnoy\Nestedset\NodeTrait; use Laracasts\Presenter\PresentableTrait;

class Page extends Model { use SoftDeletes; use NodeTrait; use PresentableTrait;

protected $presenter = 'Package\CMS\Presenters\PagePresenter';

public function ImageThumb($image) {
	$img = Image::make($image)->resize(300, 200);

}

public function relatedFiles() {
	return $this->hasMany('Skylarnet\CMS\File');
}

public function updateOrder($order, $orderPage) {
	//dd($this, $order, $orderPage);
	$relative = Page::findOrFail($orderPage);

	if($order == 'before') {
		$this->beforeNode($relative)->save();
	} elseif ($order == 'after') {
		$this->afterNode($relative)->save();
	} else {
		$relative->appendNode($this);
	}

	Page::fixTree();

}

}

alexteie's avatar

and here is my controller

namespace Package\CMS\Controllers;

use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\File; use Illuminate\Support\Str;

use Package\CMS\Page; use Image;

class PageController extends Controller {

private $Message;

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct(Page $Pages) {
    $this->Pages = $Pages;
    $this->cache_seconds = $_ENV['CACHE_SECONDS'];
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $index = '1';
    $Page = new Page();

    if ($request->has('name')) $Page->name = $request->input('name');
    if ($request->has('title')) $Page->title = $request->input('title');
    
    $Page->slug = Str::Slug($request->input('title'));

    $latestSlug = Page::whereRaw("slug RLIKE '^{$Page->slug}(-[0-9]*)?$'")
        ->latest('id')
        ->pluck('slug')
        ->first();

    if($latestSlug) {
        $slugBlocks = explode('-', $latestSlug);
        $number = end($slugBlocks);

        $Page->slug .= '-' . ($number + 1);
    }

    if ($request->has('content')) $Page->content = $request->input('content');

    if ($request->has('status')) {
        $Page->status = '1';
    } else {
        $Page->status = '0';
    }


    $this->updatePageOrder($Page, $request);
    
    $Page->save();



    return redirect()->route('pages.index');
}

protected function updatePageOrder(Page $Page, Request $request) {
    if($request->has('order', 'orderPage')) {
        if($Page->id == $request->orderPage) {
            flash('Cannot Order Page against itself')->error();
            return redirect(route('pages.edit', ['page' => $Page->id]))->withInput();
        }
        $Page->updateOrder($request->order, $request->orderPage);
    }
}

}

alexteie's avatar

I just found out if i change those 2 files to the namespace App and App\Http\Controllers en copied the files to those dirs it works?

how is this possible and what do i miss or do it wrong why it isn't working in mine package?

Please or to participate in this conversation.