سؤال

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?

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

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()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top