【问题标题】:Relationship hasOne, hasMany Eloquent with MongoDB return empty array关系 hasOne, hasMany Eloquent 与 MongoDB 返回空数组
【发布时间】:2020-11-26 21:23:02
【问题描述】:

我正在尝试使用 jenssegers/mongodb 库在 Lumen 中建立 hasOne / hasMany 关系,但这对我不起作用,我确实尝试了以下选项:

  • 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')
          );
      }

感谢阅读

【问题讨论】:

  • "Doesn't work for me" 并没有真正告诉我们任何事情,您遇到了什么错误?
  • 嗨 Remul,它返回空数组
  • 请分享您的代码、模型、控制器
  • 嗨@OMR 我现在更新了问题

标签: laravel mongodb relationship lumen


【解决方案1】:

你应该像doc一样调整你的关系:

在 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");
    }

【讨论】:

  • 嗨@OMR,感谢您回复我,我确实测试了您的解决方案,结果是一样的,一个空数组:(
猜你喜欢
  • 2016-03-17
  • 2020-01-08
  • 2014-11-29
  • 1970-01-01
  • 2020-03-05
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多