2017-05-02 9 views
1

Ich habe diese Tabellen:Beziehung zwischen zwei Tabellen mit einer Verknüpfungstabelle

topics 
------- 
id | title 
------+---------- 
1  | Sport 
2  | Social 

posts_topics 
------------ 
id | post_id | topic_id 
------+--------------+------------ 
1  | 1   |  1 
2  | 1   |  2 

posts 
------ 
id | title 
-----+---------- 
1 | A Test Post 

Ich speichere Themen in topics Tabelle und verwenden posts_topics zwischen meinem posts Tabelle zu verknüpfen und topics

jetzt will ich wählen title von Themen bei der Auswahl von Beiträgen,

Nach einigem Suchen in StackOverflow und Google habe ich diese Modelle geschrieben:

Posts.php

public function post_topics() 
    { 
     return $this->hasMany('App\PostTopics'); 
    } 

PostTopics.php

public function topics() 
    { 
     return $this->hasManyThrough('App\Posts', 'App\Topics', 'id', 'topic_id'); 

    } 

Topics.php

protected $table = 'topics'; 

und in meinem Controller ich versucht zu holen:

$post = Posts::with('post_topics')->find($post_id); 
dd($post); 

Jetzt funktioniert dieser Code, aber Titel der Themen können nicht zurückgegeben werden.

+0

Sie haben eine Viele-zu-Viele-Beziehung mit 'posts_topics' als Pivot-Tabelle. Sie können dies hier nachlesen: https://laravel.com/docs/5.4/eloquent-relationships#many-to-many – patricus

Antwort

0

Ändern Sie den Code zu einer Viele-zu-viele-Beziehung in Posts.php:

public function post_topics() 
{ 
    return $this->belongsToMany('App\Topics', 'posts_topics', 'post_id', 'topic_id'); 
} 

Und dann nennen:

$post = Posts::with('post_topics')->find($post_id); 

Versuchen Sie dies und überprüfen, ob es für Sie arbeitet.

Verwandte Themen