在 Laravel 中,使用 Eloquent ORM 可以方便地检索关系数据。考虑以下场景:
数据库表:
文章:
类别:
用户:
目标:
显示文章及其类别使用名称代替类别 ID,使用用户名代替用户 ID。
使用传统 SQL 查询:
这可以使用如下传统 SQL 查询来实现:
$articles = DB::table('articles') ->join('categories', 'articles.categories_id', '=', 'categories.id') ->join('users', 'users.id', '=', 'articles.user_id') ->select('articles.id', 'articles.title', 'articles.body', 'users.user_name', 'categories.category_name') ->get();
使用 Eloquent 模型:
但是,在 Laravel 中,使用 Eloquent 模型可以实现更简化的方法。首先,定义模型:
Article.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'); } }
Category.php:
namespace App\Models; use Eloquent; class Category extends Eloquent { protected $table = "categories"; public function articles() { return $this->hasMany('App\Models\Article'); } }
User.php:
namespace App\Models; use Eloquent; class User extends Eloquent { protected $table = 'users'; public function articles() { return $this->hasMany('App\Models\Article'); } }
定义这些模型后,检索所需数据变得简单:
$article = \App\Models\Article::with(['user','category'])->first();
然后您可以按如下方式访问属性:
// Retrieve user name $article->user->user_name // Retrieve category name $article->category->category_name
此外,您还可以按类别或用户检索文章:
$categories = \App\Models\Category::with('articles')->get(); $users = \App\Models\User::with('articles')->get();
更多详细信息,请参阅 Laravel 官方文档:http://laravel.com/ docs/5.0/eloquent
以上是如何使用 Eloquent 模型在 Laravel 中连接三个表?的详细内容。更多信息请关注PHP中文网其他相关文章!