Database 通过Laravel 5.4中的一对一透视表获取属性

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 = 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-谢谢。我想得太多了。还要注意的是,这会让你的人际关系每时每刻都充满渴望。如果这是您想要的结果,那么这很好,但如果不是,这将在每次获取时不必要地加载关系。这是正确的,这就是为什么我在加载类别模型时说的。还要注意,这将在每次加载时都急切地加载您的关系。如果这是您想要的结果,那么这很好,但如果不是这样,则会在每次获取时不必要地加载关系。这是正确的,这就是为什么我在加载类别模型时说的。