2016-10-17 15 views
0

私はlaravels eloquentマッピング機能を理解しようとしています。 私は3つのテーブルした場合:Laravelの理解と伝統的なテーブルマッピング

Article 
Asset 
ArticleAssetMap 

記事:簡単な表、ID、タイトル、本文、などの日付

資産:資産パスなど

ArticleAssetMap日付:2つのcolumsを。 article_id、asset_id

私は、すべてまたはいくつかの記事をリクエストしたときにマップテーブルをチェックし、見つかったマップがある場合、そのアセットを取得する方法を理解する必要があります。

私は上記のすべてのテーブルのためのモデルを持っている、そしてreeeeallyそれは雄弁のonetomany/belongssto等などと関係していると思うが...しかし、私のためにそれを打破するためのまともなチュートリアルを見つけることができません...ダム..それを得る良い方法はありますか?

+0

を、laravelの雄弁が「正しい列」名前を探します。例えば、資産テーブルは、その主キーとしてasset_idを有する。ドキュメントでは、PKとFKの指定は、モデルに追加のパラメータを追加することで行うことができます。 – bwaaaaaa

+0

ああ、私の資産テーブルは、priamryキーとして 'id'しか持っていませんでした...それはasset_idに名前を変更し、記事etcでも同じ名前にする必要がありますか? – Beertastic

+0

ええ、またはフィールド名を指定してみてください。また、モデルや移行を作成するためにlaravelの職人を使用してください。 https://laravel.com/docs/5.3/eloquent-relationships#one-to-many – bwaaaaaa

答えて

1

第3のテーブルの名前をarticle_assetとし、次のようにします。あなたのArticleクラスの

あなた Assetクラスの
// if one article has many assets 
public function assets() 
{ 
    return $this->hasMany(Asset::class); 
} 

// if one article has only one assets 
public function asset() 
{ 
    return $this->hasOne(Asset::class); 
} 

資産が属している場合、物品

public function article() 
{ 
    return $this->belongsTo(Article::class); 
} 

一つに資産は、多くの記事に属する場合

public function articles() 
{ 
    return $this->belongsToMany(Article::class); 
} 

あなたは今すぐ行けます。

+0

実際には、これは多対多の場合があります。すなわち、資産は多くの記事に属し、記事は多くの資産を含むことができる。 – JofryHS

+0

記事を追加すると、多くの資産シナリオが含まれる可能性があります。他のものを追加する。 –

+0

Hm .. no ..テーブルスキーマに基づいて、明らかに 'ArticleAssetMap'はピボットテーブルです。ほとんどの場合、ここで ' - > belongsToMany()'だけが必要です。 – JofryHS

0

あなたもhasManyのメソッドに追加の引数を渡すことで、外国とローカルキーを上書きすることがあります。デフォルトでは

return $this->hasMany('App\Comment', 'foreign_key'); 

return $this->hasMany('App\Comment', 'foreign_key', 'local_key'); 

https://laravel.com/docs/5.3/eloquent-relationships#one-to-many

関連する問題