Intereting Posts
$ settings или Config Class для сохранения настроек проекта? Модель Laravel с POINT / POLYGON и т. Д., Используя DB :: raw выражения Простая система входа с использованием CodeIgniter, возвращающая 404 при входе в систему Создание SOAP-запроса с PHP – как добавить атрибуты в теги XML? Множественное сопоставление поискового слова с использованием strpos PHP Поиск многомерного ассоциативного массива Как распечатать страницу в PHP для печати с использованием принтера, аналогичного работе с окном.print () В MySQL Table нет ошибки, но она существует php включает проблему с URL-адресами с параметрами? view = task & others file not found Использование записей MX для проверки адресов электронной почты Извлечение имен функций из файла (с регулярными выражениями или без них) Справка по регулярному выражению: проверка поддомена CakePHP 2.3 – Тестирование модулей Вход для пользователей Redbean O / RM хранит «дату» как varchar (255)? MySQL + PHP: выборка данных с использованием внешних ключей

hasMany проблема отношений в Laravel 5.3 + библиотека MongoDB 'jenssegers / laravel-mongodb'

Я использую библиотеку MongoDB в Laravel 5.3 . У меня есть две коллекции в MongoDB и я хочу сделать hasMany отношение b / w их.

MongoDB:

Первая коллекция: Сотрудник

 { "_id" : ObjectId("586ca8c71a72cb07a681566d"), "employee_name" : "John", "employee_description" : "test description", "employee_email" : "john@email.com", "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" : "carlos@email.com", "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'); } } 

контроллер:

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

Когда я хочу увидеть задачу против сотрудника, она показывает мне ниже:

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

Как я могу это исправить?

в Mongo Eloquent при создании отношений Many to Many вам не нужно иметь сводную таблицу, то есть 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()); 

Да, в этом случае вам нужно использовать ownToMany вместо hasMany …