Question

I have following table

Schema::create('jokes_categories', function(Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('is_active');
    $table->timestamps();
});

Schema::create('jokes', function(Blueprint $table) {
    $table->increments('id');
    $table->string('content', 200)->unique();;
    $table->enum('is_active', array('Y', 'N'));
    $table->integer('category_id')->unsigned();
    $table->foreign('category_id')->references('id')->on('jokes_categories');
    $table->timestamps();
});

In the jokes table category_id is a foreign key and it has a one-to-many relationship with jokes_categories

In the model I have the following:

class Joke extends \Eloquent {

    public static $rules = array();

    // Don't forget to fill this array
    protected $fillable = array();

    public function JokesCategory(){
         return $this->belongsTo('JokesCategory');
    }
}

In the controller I have the following:

$jokes = Joke::all();

But it does not pull through joke_categories.name (I was under the impression that the model definition will directly help to pull related models)

What could be the solution?

Was it helpful?

Solution

Your query is just on the Joke table.

You could eagerload the categories ie.

$jokes = Joke::with('JokesCategory')->get();

See docs: http://laravel.com/docs/eloquent#eager-loading

OTHER TIPS

The convention is actually camel case instead of pascal case, otherwise Laravel doesn't seem to automatically load the relationships. I made the same mistake and couldn't figure out why my relationships where not loading automatically.

public function jokesCategory()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top