我正在使用MongoDB
Laravel 5.3
中的库。我在 MongoDB
中有两个集合,我想在它们之间建立一个 hasMany
关系。
MongoDB:
第一个收藏: 员工
{
"_id" : ObjectId("586ca8c71a72cb07a681566d"),
"employee_name" : "John",
"employee_description" : "test description",
"employee_email" : "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e2888d8a8ca2878f838b8ecc818d8f" rel="noreferrer noopener nofollow">[email protected]</a>",
"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" : "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="721113001e1d0132171f131b1e5c111d1f" rel="noreferrer noopener nofollow">[email protected]</a>",
"updated_at" : "2017-01-04 11:45:20",
"created_at" : "2017-01-04 11:45:20"
}
第二个系列: 任务
{
"_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"
}
我在它们之间创建了数据透视表
Employee_Task
{
"_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:
型号:
员工:
<?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');
}
}
任务:
<?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');
}
}
Controller :
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());
关于php - Laravel 5.3 + MongoDB 库中的 hasMany 关系问题 'jenssegers/laravel-mongodb',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41462510/