Ich habe drei Tische
Artikeltabelle
id
title
body
categories_id
user_id
Kategorietabelle
id
category_name
Benutzertabelle
id
user_name
user_type
Ich möchte Artikel mit ihrem Kategorienamen anstelle von Kategorie-ID und Benutzername anstelle von Benutzer-ID anzeigen. Ich versuche wie diese Abfrage. Es ist Arbeit!
$articles =DB::table('articles')
->join('categories', 'articles.id', '=', 'categories.id')
->join('users', 'users.id', '=', 'articles.user_id')
->select('articles.id','articles.title','articles.body','users.username', 'category.name')
->get();
Aber ich möchte es auf eloquente Weise tun. Bitte, wie könnte ich tun?
->join('categories', 'articles.id', '=', 'categories.id')
? Stattdessenarticles.id
sollte es seinarticles.categories_id
. Oder liege ich falsch?Antworten:
Mit Eloquent ist es sehr einfach, relationale Daten abzurufen. Testen Sie das folgende Beispiel mit Ihrem Szenario in Laravel 5.
Wir haben drei Modelle:
1) Artikel (gehört zu Benutzer und Kategorie)
2) Kategorie (hat viele Artikel)
3) Benutzer (hat viele Artikel)
1) Article.php
<?php namespace App\Models; use Eloquent; class Article extends Eloquent{ protected $table = 'articles'; public function user() { return $this->belongsTo('App\Models\User'); } public function category() { return $this->belongsTo('App\Models\Category'); } }
2) Category.php
<?php namespace App\Models; use Eloquent; class Category extends Eloquent { protected $table = "categories"; public function articles() { return $this->hasMany('App\Models\Article'); } }
3) User.php
<?php namespace App\Models; use Eloquent; class User extends Eloquent { protected $table = 'users'; public function articles() { return $this->hasMany('App\Models\Article'); } }
Sie müssen Ihre Datenbankbeziehung verstehen und in Modellen einrichten. Benutzer hat viele Artikel. Kategorie hat viele Artikel. Artikel gehören zu Benutzer und Kategorie. Sobald Sie die Beziehungen in Laravel eingerichtet haben, können Sie die zugehörigen Informationen leicht abrufen.
Wenn Sie beispielsweise einen Artikel mithilfe des Benutzers und der Kategorie abrufen möchten, müssen Sie Folgendes schreiben:
$article = \App\Models\Article::with(['user','category'])->first();
und Sie können dies wie folgt verwenden:
//retrieve user name $article->user->user_name //retrieve category name $article->category->category_name
In einem anderen Fall müssen Sie möglicherweise alle Artikel innerhalb einer Kategorie oder alle Artikel eines bestimmten Benutzers abrufen. Sie können es so schreiben:
$categories = \App\Models\Category::with('articles')->get(); $users = \App\Models\Category::with('users')->get();
Weitere Informationen finden Sie unter http://laravel.com/docs/5.0/eloquent
quelle
return Response::json( array( 'total_count' => $count, 'incomplete_results' => false, 'items'=> $articles->toArray() ));
Wie diese Wie kann ich das JSON-Format verwenden?join
ist einfach. Die Antwort von @NayZawOo unten ist also akzeptabler.Versuchen:
$articles = DB::table('articles') ->select('articles.id as articles_id', ..... ) ->join('categories', 'articles.categories_id', '=', 'categories.id') ->join('users', 'articles.user_id', '=', 'user.id') ->get();
quelle
$articles =DB::table('articles') ->join('categories','articles.id', '=', 'categories.id') ->join('user', 'articles.user_id', '=', 'user.id') ->select('articles.id','articles.title','articles.body','user.user_name', 'categories.category_name') ->get(); return view('myarticlesview',['articles'=>$articles]);
quelle