php - 未定义的属性:App\User::$login 使用 Jenssegers\Mongodb

标签 php mongodb laravel-5

我在使用 Laravel 5.5Jenssegers\Mongodb 关联两个 时遇到了麻烦。

这是我的用户:

<?php
namespace App;

use App\Login;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Usuario extends Eloquent
{
    protected $connection = 'mongodb';
    protected $collection = 'user';

    protected $fillable = [
        'name', 'nickname', 'date_birth', 'gender', 'login',
    ];

     public function login(){
        return $this->belongsTo(Login::class, 'login');
    }

}

这是我的登录:

<?php
namespace App;

use App\User;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Login extends Eloquent
{
    protected $connection = 'mongodb';
    protected $collection = 'login';

    protected $fillable = [
        'email', 'password',
    ];

    protected $hidden = [
        'password',
    ];

    public function user(){
        return $this->hasOne(User::class, 'login');
    }   
}

在 UserController 上,我这样定义索引方法:

public function index()
{
    try {

    $user= User::with('login')->get();

    return response()->json(['users' => $user], 200);

    } catch(Exception $e) {
       throw new Exception($e);
    }
}

当我POST 一个登录到存储方法 的用户时,它运行良好。但是,当我调用 GET 时,我收到了这条消息:

ErrorException (E_NOTICE) Undefined property: App\User::$login

laravel.log 上,它有:

[2018-12-12 13:05:42] local.ERROR: Undefined property: App\User::$login {"exception":"[object] (ErrorException(code: 0): Undefined property: App\User::$login at [project-path]\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Relations\BelongsTo.php:28) [stacktrace]

我已经试过了

use Jenssegers\Mongodb\Relations\BelongsTo;
use Jenssegers\Mongodb\Relations\HasOne;
use Jenssegers\Mongodb\Relations\HasMany;

在每个 class 的顶部,但是它也不起作用。

当我在 controller 上调用 User::all(); 时,我得到了 ID 为 login object 的用户:

{
   "users": [
              {
                 "_id": "5c10ed8bc557ab2ed0007034",
                 "name": "test user",
                 "login": "5c10ed8bc557ab2ed0007033",
                 //other fields
              }
           ]
}

但我想这样得到它:

{
   "users": [
              {
                 "_id": "5c10ed8bc557ab2ed0007034",
                 "name": "test user",
                 "login": {
                              "_id": "5c10ed8bc557ab2ed0007033",
                              "email": "some@email",
                              "password": "somepwd"
                          },
                 //other fields
              }
           ]
}

我认为这是 Jenssegers\Mongodb 的问题,因为我在 MySQL 数据库 上使用了这个项目,现在我正在将它迁移到 MongoDB

最佳答案

controller 中,我分别操作了两个 classes,如下所示:

public function index()
{
    try {

    $users = User::all();

    $userslogin = array();
    foreach ($users as $usr) {
        $login = Login::find($usr)->first();
        $usr->login = $login;
        $userslogin[] = $usr;
    }

    return response()->json(['usuario' => $usuarios], 200);

    } catch(Exception $e) {
       throw new Exception($e);
    }
}

如果有人有其他解决方案,我将不胜感激。

关于php - 未定义的属性:App\User::$login 使用 Jenssegers\Mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53744163/

相关文章:

javascript - 在警报消息后使用 PHP 重定向到 HTML 页面

node.js - 带循环的 Mongodb 聚合管道

node.js - Mongodb数据库连接代码破坏了应用程序

php - Laravel Command 输出的 Node 版本与命令行不同

mysql - Eloquent - 不同的多列,但不精确

php - openssl_encrypt、openssl_decrypt key 、iv

php - Codeigniter Active record Join 2 x From in 语句

c# - PHP等价于C#的多维数组声明

mongodb - mongoimport 版本 2.6.7 真的有 "--ssl"标志吗?

laravel - Laravel 收银员创建新订阅时出错