我在使用 Laravel 5.5
和 Jenssegers\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/