Laravel Eloquent 用于显示主题表中的行?
Posted
技术标签:
【中文标题】Laravel Eloquent 用于显示主题表中的行?【英文标题】:Laravel Eloquent for display row from subject table? 【发布时间】:2015-12-25 17:32:58 【问题描述】:我有三个数据库表
-
类别(ID、名称)
subcategory (id,name,category_id) foreign_key category_id on table category(id)。
subject(id,name,subcategory_id) 表子类别 (id) 上的 foreign_key subcategory_id。
我想要一行包含以下内容 -
subject_id subject_name category_name subcategory_id
如何使用 eloquent 来做到这一点。如果方法是错误的。请提出一个好的方法来实现同样的目标。
【问题讨论】:
你能把你的代码贴出来吗? 我不能在这里发布大代码,现在我用它来显示子类别 $subcategory= Subcategory::with('category')->get(); public function category() return $this->belongsTo('App\Category'); . 【参考方案1】:假设您有以下模型:
// Category Model
class Category extends \Eloquent
protected $table = "category";
public function subcategory()
$this->hasMany('Subcategory','category_id');
// Subcategory Model
class Subcategory extends \Eloquent
protected $table = "subcategory";
public function category()
$this->belongsTo('Category', 'category_id');
pubic function subject()
$this->hasMany('Subject', 'subcategory_id');
// Subject model
class Subject extends \Eloquent
protected $table = "subject";
public function subcategory()
$this->belongsTo('Subcategory','subcategory_id');
您可以按如下方式获取控制器中的数据:
// for subject with id 1
public function getOneRow()
$subject = Subject::with('subcategory.category')->findOrFail(1);
//subject_id = $subject->id
//subject_name = $subject->name
//subcategory_id = $subject->subcategory->id
//category_name = $subject->subcategory->category->name
return array("subject_name"=>$subject->name, "category_name"=>$subject->subcategory->id, "subcategory_name"=>$subject->subcategory->category->name);
// for all subjects
public function getOneRow()
$subjects = Subject::with('subcategory.category')->all();
$out = array();
foreach($subjects as $subject)
// each row
//subject_id = $subject->id
//subject_name = $subject->name
//subcategory_id = $subject->subcategory->id
//category_name = $subject->subcategory->category->name
$out[] = array("subject_name"=>$subject->name, "category_name"=>$subject->subcategory->id, "subcategory_name"=>$subject->subcategory->category->name);
return $out;
为 Laravel 5.1 编辑 您的模型将有不同的定义。这是一个例子。或关注docs:
// Category Model Laravel 5.1
use Illuminate\Database\Eloquent\Model;
class Category extends Model
protected $table = "category";
public function subcategory()
$this->hasMany('Subcategory','category_id');
编辑:按照评论中的要求使用返回语句完成功能
【讨论】:
原文基于 Laravel 4.2。我添加了一个部分来显示 Laravel 5.1 中所需的潜在更改 $subject=Subject::with('subcategoryup.category')->findOrFail(1);使用这个我在 Builder.php 第 129 行收到此错误 ModelNotFoundException: No query results for model [App\Subject]。 好吧,这假设您已经正确定义了模型并且您的表中有数据。ModelNotFoundException
被抛出,因为如果 findOrFail
在您的 subject
表中找不到对应于 id=1
的条目,则应该这样做。如果你的主键不是id
,那么你的模型中应该有protected $primaryKey = 'subject_id';
。
$subjects = Subject::with('subcategory.category')->all();这里不是->all(),我只想要所有表中的几列。你能提供一个例子吗。谢谢,解决方案有效。但我只想查询几列。
这取决于您想要哪些列。您可以像这样指定过滤条件:$subject=Subject::with('subcategoryup.category')->where('name','like','maths')->get();
或者如果您知道要检索的 ID:$subject=Subject::with('subcategoryup.category')->find([1, 3, 5, 7]);
以上是关于Laravel Eloquent 用于显示主题表中的行?的主要内容,如果未能解决你的问题,请参考以下文章
多个 Laravel Eloquent 关系未显示来自所有关系的数据
使用 laravel eloquent 从两个连接表中获取数据