2017-02-28 4 views
0

私は現時点で2つのテーブルを持っています:アーティストとジャンル。1と0に基づいてデータベーステーブルからテーブルを取り出す方法は?

ジャンルはartist_idを使用してアーティストに関連付けられています。次のようにphpMyAdminのジャンルテーブルが設定されている:

enter image description here

1Sは、ID = 3のアーティストは、チェックボックスを使用して、古典的及びラップを選択したことを示しています。

カードを効率的に表示して、アーティストのジャンルをリストに表示したいと考えています。 artist_id = $ idの行の1つにつき、すべてのジャンルを出力します(この場合は、クラシックとラップ)。

私はartistgenreという新しいオブジェクトを作成し、new artistgenre();を使って新しいオブジェクトを作成し、属性を割り当てようと考えていました。多分私はそれをする必要はない。現在私はアーティストと呼ばれるオブジェクトを持っており、$artist = Artist::findbyid($sessionid);を作成し、$artist->name; $artist->location;を使用してデータベースからデータを出力します。

+1

DB設計が効率的私見ではありません。 genre-tableは 'id、genre_name'を持つべきです。アーティストとジャンルn2nをつなぐ別のテーブルを用意しましょう。 ( 'arist_id、genre_id'と一緒に) – Jeff

+0

@Jeff私は何を意味するのか見て、私はgenre_nameにすべてのジャンルをリストアップします。次に、(id、artist_id、genre_id)を持つartistgenreという別の3番目のテーブルを作成し、artist_id = $ idの場所に結果を取得します。私はそのようなデータをどうやって取得するのか分かりません。もし私が器具のような別のテーブルを探査したらどうなりますか? 1つのテーブルを使用して、アーティストが演奏するジャンルと楽器の両方をリストすることは可能ですか? – GRS

+0

@GRSデザインに関するJeffのコメントは正しいです。インストゥルメントでは、パターンを繰り返します。 artist_instrumentというテーブルを作成します。関連レコードを取得するには、SQL結合を使用する必要があります。 Eloquentを使用しているようですので、ここでページ全体を読むことをお勧めします:https://laravel.com/docs/5.4/eloquent-relationships –

答えて

0

私はこのクエリは、何が必要だと思う:

SELECT g.id, g.name 
FROM artists a 
    INNER JOIN artist_genres ag ON a.id = ag.artist_id 
    INNER JOIN genres g ON ag.genre_id = g.id 
関連する問題