Database 通过Laravel 5.4中的一对一透视表获取属性
我有一个模型叫做Category。一个类别可以有多个主题。一个主题只能使用一个框架。但是一个框架可以由多个主题使用 我的控制器方法:Database 通过Laravel 5.4中的一对一透视表获取属性,database,laravel,eloquent,relationship,one-to-one,Database,Laravel,Eloquent,Relationship,One To One,我有一个模型叫做Category。一个类别可以有多个主题。一个主题只能使用一个框架。但是一个框架可以由多个主题使用 我的控制器方法: $category = Category::find(1); foreach ($category->themes as $theme) { } return response()->json(['category' => $category]); 输出: category: { id:
$category = Category::find(1);
foreach ($category->themes as $theme) {
}
return response()->json(['category' => $category]);
输出:
category: {
id: 1,
name: "DemoCategory",
created_at: null,
updated_at: null,
themes: [
{
id: 1,
frame_id: 1,
created_at: null,
updated_at: null,
pivot: {
category_id: 1,
theme_id: 1
}
}
]
}
主题模型:
public function categories()
{
return $this->belongsToMany('App\Category', 'category_theme');
}
public function frame()
{
return $this->hasOne('App\Frame', 'theme_frame');
}
Fram模型:
empty
如何通过透视表连接主题和框架
正如您所看到的,主题嵌套在JSON对象中。但我也希望特定主题的框架嵌套在JSON对象中。框架和主题通过透视表具有一对一的关系。但是正如您所看到的,它只返回id,而不是整个对象。如何将框架对象嵌套在JSON对象内的特定主题中?您不需要使用循环,可以立即加载关系
// with only themes
$category = Category::with('themes')->find(1);
//with themes and frame
$category = Category::with('themes.frame')->find(1);
您不需要使用循环,您可以加载关系
// with only themes
$category = Category::with('themes')->find(1);
//with themes and frame
$category = Category::with('themes.frame')->find(1);
快速回答是定义两个公共变量,每个模型一个,或者在查询中使用with()方法,如下所示: 类别模型:
public $with = ['themes'];
主题模型:
public $with = ['frame'];
现在,无论何时加载
类别
模型,如category::first()
,您还将加载与其关联的主题
,对于每个主题
,您将加载与该主题关联的框架
,希望这就是您正在寻找的内容。快速回答将定义两个公共变量,每个模型一个,或者在查询中使用with()方法,内容如下:
类别模型:
public $with = ['themes'];
主题模型:
public $with = ['frame'];
现在,无论何时加载
类别
模型,如category::first()
,您还将加载与其关联的主题
,对于每个主题
,您将加载与该主题关联的框架
,希望这就是您所寻找的。问题是,为什么您希望一对一关系有一个数据透视表?我认为hasOne
仅适用于1-1关系。我希望主题属于一个框架,而框架有许多主题。@apokryfos-谢谢。我想得太多了。问题是,为什么您希望一对一关系有一个数据透视表?我认为hasOne
仅适用于1-1关系。我希望主题属于一个框架,而框架有许多主题。@apokryfos-谢谢。我想得太多了。还要注意的是,这会让你的人际关系每时每刻都充满渴望。如果这是您想要的结果,那么这很好,但如果不是,这将在每次获取时不必要地加载关系。这是正确的,这就是为什么我在加载类别模型时说的。还要注意,这将在每次加载时都急切地加载您的关系。如果这是您想要的结果,那么这很好,但如果不是这样,则会在每次获取时不必要地加载关系。这是正确的,这就是为什么我在加载类别模型时说的。