2016-08-28 16 views
0

Eloquentのwith()を使用すると、熱心にロードされたデータは時々になります。nullになります。私の場合は、UsersBlogpostsCategoriesの3つのテーブルがあります。 blogpostsテーブルには、authorcategoryという2つの外部キーがあります。実行されるクエリは、Eloquent ORMはwith()eager loadを使用してnullを返します

return Blogpost::with(['author', 'category'])->get(); 

で与えられます。応答は、まあまあです。 authornullからid: 3categoryからid: 4になることに注意してください。実際には

両方のID 1 IDS 24(スティーブ)がそうであるように、3は同じ著者(スーパーユーザ)を持っています。 id 14にも同じカテゴリ(Web開発者)があります。

カテゴリ/著者が既に取得されていて、過去のカテゴリ/著者がブログポストにバインドされているように見えます。最後に、ここで

[ 
    { 
    id: 4, 
    author: null, 
    image_name: "banner1.png", 
    category: null, 
    intro: "Hello World!", 
    }, 

    { 
    id: 3, 
    author: null, 
    image_name: "banner1.png", 
    category: { 
     id: 3, 
     name: "big data", 
    }, 
    intro: "Hello World!", 
    }, 

    { 
    id: 2, 
    author: { 
     id: 2, 
     email: "[email protected]", 
     fullname: "foo foo", 
     is_admin: false, 
    }, 
    image_name: "banner1.png", 
    category: { 
     id: 2, 
     name: "science", 
    }, 
    intro: "Hello World!", 
    }, 

    { 
    id: 1, 
    author: { 
     id: 1, 
     email: "[email protected]", 
     fullname: "superuser superuser", 
     is_admin: true, 
    }, 
    image_name: "banner1.png", 
    category: { 
     id: 1, 
     name: "web dev", 
    }, 
    intro: "Hello World!", 
    } 
] 

はモデルに

// User model 
public function blogposts() { 
    return $this->hasMany('App\Blogpost', 'id'); 
} 

// Blogpost model 
public function author() { 
    return $this->belongsTo('App\User', 'id'); 
} 

public function category() { 
    return $this->belongsTo('App\Category', 'id'); 
} 

// Category model 
public function blogposts() { 
    return $this->hasMany('App\Blogpost', 'id'); 
} 

を定義した関係があり、これに任意の説明がありますか?

+0

authorテーブルのauthor idが見つかりません。 –

答えて

2

モデル定義に誤りがあったようですが、ここに修正モデルがあります。

// User model 
public function blogposts() { 
    return $this->hasMany('App\Blogpost', 'id', 'author'); 
} 

// Blogpost model 
public function author() { 
    return $this->belongsTo('App\User', 'author', 'id'); 
} 

public function category() { 
    return $this->belongsTo('App\Category', 'category', 'id'); 
} 

// Category model 
public function blogposts() { 
    return $this->hasMany('App\Blogpost', 'id', 'category'); 
} 
関連する問題