Отношения hasOne, hasMany Eloquent с MongoDB возвращают пустой массив - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь создать отношение hasOne / hasMany в Lumen, используя jenssegers / mongodb библиотеку, но у меня это не работает, я пробовал следующие варианты:

  • return $this->hasMany(Token::class,'_id.toString()','token.toString()');
  • return $this->hasMany(Token::class,'_id','token');
  • Когда я использовал необработанный запрос в методе Это сработало для меня
  • Когда я вставил данные, я сохранил внешнее поле как new ObtjectID

Это модель пользователя:

<?php

namespace App\Models;

use Jenssegers\Mongodb\Eloquent\Model;
use MongoDB\BSON\ObjectID;

class Usuario extends Model
{   
    //Tabla seleccionada
    protected $table = 'usuario';

    //Campos de la tabla
    protected $fillable = [
        '_id',         
        'usuario',
        'token',
    ];

    //Llave primaria
    protected $primaryKey = '_id';
   
    //Relaciones
    public function token()
    {            
        return $this->hasMany(Token::class, 'usuario','_id');
    } 
}

Это модель токена:

<?php

namespace App\Models;

use Jenssegers\Mongodb\Eloquent\Model;

class Token extends Model 
{   
    //Tabla seleccionada
    protected $table = 'token';

    //Campos de la tabla
    protected $fillable = [
        '_id',  
        'nombre',  
        'usuario',
        'token',  
        'fecha',      
    ];

    //Llave primaria
    protected $primaryKey = '_id';

    //Relaciones
    public function usuario()
    {
        return $this->belongsTo(Usuario::class,"_id","usuario");
    }

}

А это метод:

      $result =  Usuario::with('token')->where('eliminado', 0)->get(); 
      if ($result->count() > 0) {
          return response() -> json(
              array('data' => $result, 'message' => config('constants.messages.3.message')),
              config('constants.messages.3.code')
          );

      }else{
          return response() -> json(
              array('data' => $result, 'message' => config('constants.messages.4.message')),
              config('constants.messages.4.code')
          );
      }

Спасибо, что прочитали меня

1 Ответ

0 голосов
/ 06 августа 2020

вы должны настроить свое отношение, как в do c:

в модели Usuario:

  public function tokens() 
 // it's convention to use 's' because of this relation returns collection not 
//single model instance ....
    {            
        return $this->hasMany(Token::class, 'usuario');
    } 

в модели токена:

public function usuario()
    {
        return $this->belongsTo(Usuario::class,"usuario");
    }
...