Using a function from a model in a controller/view in Laravel

I am trying to access data from a query that I have placed within a function in a model. I am trying to call the function within a controller, and then send along that data to a view. So far, I have been unsuccessful. Here is the code:

Model: Fanartist.php

public function fan_likes() {
        $fan_likes = DB::table('fanartists')
                    ->join('artists', 'fanartists.fan_id', '=', '')
                    ->where('fanartists.fan_id', '=', Auth::user()->id)
                    ->select('', 'artists.stage_name', '', 'artists.state', 'artists.image_path', 'artists.description');


Controller: FansController.php
public function getHome() {
            return View::make('fans.home')
            ->with('fans', Fan::all())
            ->with('fanartists', Fanartist::fan_likes());


@foreach($fanartists as $fanartist)



When I run this, I get the error:
Non-static method Fanartist::fan_likes() should not be called statically, assuming $this from incompatible context

Thank you for your help and suggestions.


New error. I am returning the view, but now, trying to run this:

@foreach($fanartists as $fanartist)


I get the error:

log.ERROR: exception ‘ErrorException’ with message ‘Trying to get property of non-object’ in /Applications/MAMP/htdocs/crowdsets/laravel-master/app/storage/views/2ed7fc8952dab08cf4cb4f4e3d40d1ab:100



@foreach($fanartists as $fanartist)
<?php var_dump($fanartist); ?>          

I get the following output:
NULL array(6) { [0]=> string(10) "" [1]=> string(18) "artists.stage_name" [2]=> string(12) "" [3]=> string(13) "artists.state" [4]=> string(18) "artists.image_path" [5]=> string(19) "artists.description" } bool(false) string(10) "fanartists" array(1) { [0]=> object(IlluminateDatabaseQueryJoinClause)#201 (3) { ["type"]=> string(5) "inner" ["table"]=> string(7) "artists" ["clauses"]=> array(1) { [0]=> array(4) { ["first"]=> string(17) "fanartists.fan_id" ["operator"]=> string(1) "=" ["second"]=> string(10) "" ["boolean"]=> string(3) "and" } } } } array(1) { [0]=> array(5) { ["type"]=> string(5) "Basic" ["column"]=> string(17) "fanartists.fan_id" ["operator"]=> string(1) "=" ["value"]=> string(1) "1" ["boolean"]=> string(3) "and" } } NULL NULL NULL NULL NULL NULL


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Fanartist::fan_likes() is not supposed to be called statically, but if you want to call it statically then change your fan_likes function to static.
for your example

public static function fan_likes() {
    $fan_likes = DB::table('fanartists')
                ->join('artists', 'fanartists.fan_id', '=', '')
                ->where('fanartists.fan_id', '=', Auth::user()->id)
                ->select('', 'artists.stage_name', '', 'artists.state', 'artists.image_path', 'artists.description');
return $fan_likes;

Method 2

if you have a non-static function like this in your MyClass controller:

    public function my_func( ) {
            // do stuff
    return ( $stuff ) ;

then in your controller, you can call it with code like this:
$local_obj = MyClass::findOrFail( $myobj_id );
$rval = $local_obj->my_func();

if you want to call it from your view, I think you need to pass the object to the view similar to this:
$data['my_obj'] = $local_obj;
return View::make('')->with('data',$data);

and then to use in the view use something like this:
{{{$data['my_obj']->my_func() }}}

(above is copied and edited from working code – apols if i’ve made a typo )

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x