Beste PhpHelpers,

Ik ben vandaag de hele dag bezig geweest om wat te spelen met Laravel om mijn kennis hierin uit te breiden. Zelf heb ik altijd met CodeIgniter MVC gewerkt dus de stap naar Laravel is een flinke verbetering vind ik zelf ;)

Echter kom ik er met de documentatie, Google etc niet helemaal uit hoe je nu op de juiste manier het MVC model hier in moet gebruiken, en dan met name het gebruik van de models.

Wie kan mij hierbij wat op weg helpen en een duw in de juiste richting geven?

Zelf heb ik een aantal voorbeelden functioneel gekregen, echter is dit enkel met routers, controllers en views. Ik ben vanuit mijn CodeIgniter kennis gewend dat alle database acties en scripts in de models plaats vinden, maar hoe ik nu vanuit een controller een functie binnen een model juist aanroep is mij een raatsel.

De dingen die ik geprobeert heb zijn:

Controller heet: DataController
Model heet: Data

Model code:


class Data extends Eloquent {

	protected $table = 'data';

	public function save(array $options = array()){

		$set = array(
			'veld1' => Input::get('veld1'),
			'veld2' => Input::get('veld2'),
			'veld3' => Input::get('veld3'),
		);

		print_r($set);

		DB::table('data')->insert($set);


	}

}




Controller code:

class DataController extends BaseController {

	public function index(){

		return View::make('data/form');

	}

	public function save()
	{

		Data::save();

	}

}


Dit bovenstaande werkt niet, en geeft als foutmelding:
Non-static method Data::save() should not be called statically, assuming $this from incompatible context

Wie kan en wil mij helpen!
Wat je doet klopt helemaal, alleen wat de error al aangeeft, hij kan niet static worden aangeroepen. Maak in je model van public function save ... => public static function
Als je met Eloquent wilt werken raad ik je sowieso aan eerst dit goed door te lezen: http://laravel.com/docs/4.2/eloquent

Zodra je een model maakt en Eloquent extend, heb je gelijk toegang tot save en delete functies.
Die hoef je in principe dus niet zelf te definiƫren.
Verder kan je Eloquent ook gebruiken om mass-assignment tegen te gaan.
Een voorbeeld van een model zou er dan zo uit kunnen zien:

class Data extends Eloquent
{
    protected $table = 'data';
    protected $fillable = [
        'veld1',
        'veld2',
        'veld3',
    ];
}


Zolang je app/config/database.php goed is ingesteld en je een tabel hebt met de naam "data" en de velden "id", "veld1", "veld2", "veld3" is je model al klaar voor gebruik.

Een controller zou er dan zo uit kunnen zien:

class DataController extends Controller
{
    public function save()
    {
        $data = Input::only(['veld1', 'veld2', 'veld3']);
        $dataModel = new Data($data);
        $dataModel->save();
    }
}



Over ongeveer een maand komt geloof ik trouwens versie 5.0 van Laravel uit mocht je daar al interesse in hebben, staan hier een aantal mooie (gratis) screencasts https://laracasts.com/series/laravel-5-from-scratch
Hey Tim,

Bedankt voor deze informatie, hier kan ik zeker wat mee!
Ik ga weer even verder knutselen en stoeien..

Reageren