Laravel 5.3 + MongoDB 库“jenssegers/laravel-mongodb”中的 hasMany 关系问题

2023-12-03

我在用MongoDB图书馆在Laravel 5.3。我有两个收藏MongoDB我想做一个hasMany他们之间的关系。

MongoDB:

第一个收藏: Employee

{
    "_id" : ObjectId("586ca8c71a72cb07a681566d"),
    "employee_name" : "John",
    "employee_description" : "test description",
    "employee_email" : "[email protected]",
    "updated_at" : "2017-01-04 11:45:20",
    "created_at" : "2017-01-04 11:45:20"
},
{
    "_id" : ObjectId("586ca8d31a72cb07a6815671"),
    "employee_name" : "Carlos",
    "employee_description" : "test description",
    "employee_email" : "[email protected]",
    "updated_at" : "2017-01-04 11:45:20",
    "created_at" : "2017-01-04 11:45:20"
}

第二个集合: Task

{
    "_id" : ObjectId("586ccbcf1a72cb07a6815b04"),
    "task_name" : "New Task",
    "task_description" : "test description",
    "task_status" : 1,
    "task_created_at" : "2017-04-01 02:17:00",
    "task_updated_at" : "2017-04-01 02:17:00"
},
{
    "_id" : ObjectId("586cd3261a72cb07a6815c69"),
    "task_name" : "2nd Task",
    "task_description" : "test description",
    "task_status" : 1,
    "task_created_at" : "2017-04-01 02:17:00",
    "task_updated_at" : "2017-04-01 02:17:00"
}

我在它们之间创建了数据透视表

员工_任务

{
    "_id" : ObjectId("586cd0cb1a72cb07a6815bf3"),
    "employee_task_employee_id" : "586ca8c71a72cb07a681566d",
    "employee_task_task_id" : "586ccbcf1a72cb07a6815b04",
    "status" : 1
},
{
    "_id" : ObjectId("586cd7851a72cb07a6815d7d"),
    "employee_task_employee_id" : "586ca8c71a72cb07a681566d",
    "employee_task_task_id" : "586cd3261a72cb07a6815c69",
    "status" : 1
}

Laravel:

Model:

员工:

<?php
namespace App\Models;

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Employee extends Eloquent {

    protected $collection = 'employee';
    protected $primaryKey = '_id';
    
    public function tasks()
    {
        return $this->hasMany('App\Models\Task');
    }
}

Task:

<?php
namespace App\Models;

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Task extends Eloquent {

    protected $collection = 'task';
    protected $primaryKey = '_id';
    
    public function employees()
    {
        return $this->belongsToMany('App\Models\Employee');
    }
}   

控制器:

public function EmployeeData($data)
{
    $employee= Employee::find('586ca8c71a72cb07a681566d')->tasks;
    echo "<pre>";
    print_r($employee);
}

当我想查看针对员工的任务时,它会显示以下输出:

Illuminate\Database\Eloquent\Collection Object
(
    [items:protected] => Array
        (
        )

)

我怎样才能解决这个问题?


在 Mongo Eloquent 中,当创建多对多关系时,您不需要有数据透视表,这就是 SQL 思维方式,在 mongo-eloquent 多对多关系中,外键存储在数组中。所以模型应该是这样的:

<?php namespace App\Models;

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Employee extends Eloquent {

    protected $collection = 'employee';
    protected $primaryKey = '_id';

    public function tasks()
    {
        return $this->belongsToMany('App\Models\Task');
    }
}





<?php namespace App\Models;

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Task extends Eloquent {

    protected $collection = 'task';
    protected $primaryKey = '_id';

    public function employees()
    {
        return $this->belongsToMany('App\Models\Employee');
    }
}  

另外,您应该在尝试检索关系之前加载它们

 $employee= Employee::with('tasks')->find('586ca8c71a72cb07a681566d')->tasks;

您可以像在 hasMany 关系中一样保存关系

$employee->tasks()->save(new Task());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 5.3 + MongoDB 库“jenssegers/laravel-mongodb”中的 hasMany 关系问题 的相关文章

随机推荐

  • 从子文件夹中选取根文件夹的图像

    Let s say following is the directory structure of my website Now in index html我可以简单地参考如下图像 img src images logo png 但我想引用
  • 如何在elasticsearch中索引时进行映射

    我在用ElasticSearch在我索引数据的网站中MongoDB def postToEs self put data to the elasticsearch es Elasticsearch cursor self getMongoD
  • 如何获取元素相对于浏览器视口的顶部位置?

    我想获取元素相对于浏览器视口 显示页面的视口 而不是整个页面 的位置 这如何在 JavaScript 中完成 非常感谢 现有的答案现在已经过时了 当地人getBoundingClientRect 方法已经存在很长一段时间了 并且完全符合问题
  • 使用java根据月日动态绘制条形图

    我创建了一个BarChart using jfreechart在java中 该条形图根据一个月中的天数绘制 例如本月 3 月包含 31 天 因此将有 31 个柱 问题是 当我单击 下一步 按钮时 月份更改为四月 其中包含 30 天 即 30
  • Windows 7 中的命令行照片打印

    我需要在 Windows 7 中从命令行打印照片 jpg 我尝试使用 lpr 但没有成功 并找到了适用于 Windows XP 的方法 如下所示 rundll32 shimgvw dll ImageView PrintTo pt myPho
  • 为什么《Java虚拟机内部》说“NewbornBaby不需要加载”?

    Java 虚拟机内部 第 7 章类型的生命周期 初始化有如下代码片段 class NewParent static int hoursOfSleep int Math random 3 0 static System out println
  • 异步javascript问题[重复]

    这个问题在这里已经有答案了 我正在尝试做一个函数details 查找某些事件的详细信息 getdetails 基于可用事件 在下面的示例中 询问 ID 为 ZRGZZ RGHER 和 GRFDZ 的事件的详细信息 这些详细信息应放置在一个数
  • 使用 Google API 接收 Firebase 主题消息状态

    最近 我在我的应用程序中集成了 Firebase 主题概念 并且订阅了近 2000 个用户 并且每天通过我的应用程序服务器触发通知 我想知道有多少用户交付但失败了 因为如果某些用户未送达且失败 我将再次向这些成员设置重试通知 对此有什么想法
  • PHP - 尝试获取非对象的属性

    我正在尝试迭代一个名为的对象属性items包含一个数组 foreach this gt footerList gt items as item 当我执行该语句时 我收到一条错误消息 尝试获取非对象的属性 即使 var dump this g
  • 如何在jsp中拉出选定的单选按钮

    我有两个单选按钮 根据选择的单选按钮 我想将它们发送到特定的 jsp 页面 我不知道如何拉动在我的java类中选择的按钮 这是jsp
  • 使用 AssetsLibrary 框架 iPhone 访问库中的视频?

    我正在尝试在以下代码的帮助下使用 AssetsLibrary Framework 访问 iPhone 库中的视频 但是当我运行应用程序时 代码不起作用 数组资产仍然为空 我究竟做错了什么 顺便说一句 我的 iPhone 是 3G 升级到 i
  • 将文本添加到另一个程序文本框 C++

    我已经成功地将文本发送到我使用 C 创建的自定义文本框 以及记事本 计算器和其他程序 所有这些程序都带有 1 个窗口和 1 个文本框 但是 我想将文本发送到另一个具有多个文本框并且也在选项卡中的程序 它的结构如下 开放程序 从 2 个选项卡
  • 如何返回使用 malloc 分配的指针的大小?

    看这个例子 int main int argc char argv int ptr malloc 100 sizeof int printf sizeof array is d bytes n sizeof ptr printf 函数只返回
  • 使用drive.file范围执行查询时出现错误500

    此代码在 https www googleapis com auth drive 范围内运行良好 File folderEntry drive files get XXXXj0 srDPPGUEtHaVYtZFljMEk execute S
  • 如何在 Dymola (Modelica) 中使用 /bigobj 进行编译

    我正在将一个相对较小的有限元 FE 模型集成到 Modelica 中 为此 我创建了一个模型 Modelica 类 它可以读取 Matlab 二进制文件格式的质量 M 和刚度 K 矩阵 我将 FE 模型与 Modelica 标准库 Mode
  • 开始 iPhone 开发

    我是那种通常通过实践来学习的人 我有一个应用程序的想法 但我很矛盾 如果我应该开始开发 当我遇到一些东西时 只需在我的书 流行的 apress 葡萄柚书 中查找它 或者只是先通读这本书 了解基础知识 有什么建议么 我已经读完第五章了 你们都
  • 如何在QT(QGraphicsView)中打开svg文件

    如何打开 svg 文件 如 png 文件 例如它适用于 png 文件 scene new QGraphicsScene QRect 10 10 680 520 view new QGraphicsView this image new QG
  • 使用 jquery 从表中获取值作为键值对

    我有一张桌子 table class datatable caption hospitalization rates test caption thead tr th Funding Source th th Alameda County
  • 在Delphi中初始化单元之前添加代码

    是否有地方可以添加将在单元初始化之前执行的代码 我想这样做的原因是我需要更改 DecimalSeparator 这必须在某些单元初始化之前完成 我已将其放在 Application Initialize 之前的项目源中 但那时为时已晚 在我
  • Laravel 5.3 + MongoDB 库“jenssegers/laravel-mongodb”中的 hasMany 关系问题

    我在用MongoDB图书馆在Laravel 5 3 我有两个收藏MongoDB我想做一个hasMany他们之间的关系 MongoDB 第一个收藏 Employee id ObjectId 586ca8c71a72cb07a681566d e