Ich habe eine posts
Tabelle, die viele-zu-viele Beziehung mit tags
Tabelle hat, verbunden mit Pivot-Tabelle namens tagspivot
. Ich zeige einen Beitrag der folgenden Methode:Ähnliche Beiträge basierend auf einem gemeinsamen Tag erhalten?
public function showpost($titleslug) {
$post = Post::where('titleslug','=',$titleslug)->first();
return view('posts/show', compact('post', $post));
}
dann lade ich die Post-Tags in der view
wie:
@foreach($post->tags as $ptags)
<li><a href="{{route('showtag', $ptags->titleslug)}}" class="button smallGrey">#{{$ptags->title}}</a></li>
@endforeach
Meine Frage ist, wie man eine Liste der Beiträge zu erhalten, die die gleichen Tags hat mit dem aktuellen Post? es muss nicht genau dieselben Tags sein, wie der andere Beitrag ein oder zwei allgemeine Tags hat. Wenn möglich, wird die Liste nach dem Beitrag sortiert, der die häufigsten Tags mit dem aktuellen Post hat.
Das ist alles, sorry für mein schlechtes Englisch
Beiträge Tabelle:
public function up() {
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('content');
$table->string('titleslug');
$table->timestamps();
});
}
Schlagwörter Tabelle:
public function up() {
Schema::create('tags', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('titleslug');
$table->timestamps();
});
}
Tagspivot Tabelle:
public function up() {
Schema::create('tagspivot', function (Blueprint $table) {
// Create tabel tagspivot
$table->increments('id');
$table->integer('post_id')->nullable()->unsigned()->index();
$table->integer('tag_id')->nullable()->unsigned()->index();
$table->timestamps();
// Set FK tagspivot --- posts
$table->foreign('post_id')
->references('id')
->on('posts')
->onDelete('cascade')
->onUpdate('cascade');
// Set FK tagspivot --- tags
$table->foreign('tag_id')
->references('id')
->on('tags')
->onDelete('cascade')
->onUpdate('cascade');
});
}
Beziehung in Post-Modell :
public function tags()
{
return $this->belongsToMany('App\Tag', 'tagspivot', 'post_id', 'tag_id')->withTimeStamps();
}
Beziehung in Tag-Modell:
public function posts() {
return $this->belongsToMany('App\Post', 'tagspivot', 'tag_id', 'post_id');
}
So in showtag Route finden möchten Sie einfach alle Beiträge laden, die das gleiche hat Tag, unabhängig von den anderen Tags, die sie haben, bekomme ich das richtig? –
Nein, ich meine, als würde ich eine Liste von Beiträgen abfragen, die häufig verwendete Tags mit dem aktuellen Beitrag teilen, um die meisten verwandten Beiträge zu erhalten. Die 'showtag'-Route zeigt nur eine Liste von Posts, die zu einem Tag gehören. @OmarTarek –
Ich denke, Sie sollten sich die Laravel-Dokumentation anschauen, die contains und whereIn-Methode, ich hoffe, das hilft ein bisschen. https://laravel.com/docs/5.4/collections –