Laravel Jenssegers MongoDb关系不起作用?

Rob*_*Rob 9 laravel laravel-5 jenssegers-mongodb

我正在尝试使用Laravel/Jenssegers MongoDB为我的应用设置一些简单的收藏

我有两个型号:

class Item {

    public function favorites()
    {
       return $this->hasMany('App\Models\User', 'favorites');
    }
}

class User {

    public function favorites()
    {
       return $this->hasMany('App\Models\Item', 'favorites');
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,项目可以包含许多用户,并且用户可以拥有许多项目或"收藏夹".

当我尝试运行一个简单的查询,如:

Item::with('favorites')->get();
Run Code Online (Sandbox Code Playgroud)

收藏夹的关系是一个空数组.

favorites表很简单,只有三列:

_id, item_id, user_id
Run Code Online (Sandbox Code Playgroud)

我也尝试过embedsMany没有运气:

return $this->embedsMany('App\Models\User', 'favorites');
Run Code Online (Sandbox Code Playgroud)

我也尝试过各种参数组合.

return $this->embedsMany('App\Models\User', 'favorites', 'building_id', 'user_id');
return $this->embedsMany('App\Models\User', 'favorites', 'user_id', 'building_id');
return $this->hasMany('App\Models\User', 'favorites', 'building_id', 'user_id');
return $this->hasMany('App\Models\User', 'favorites', 'user_id', 'building_id');
Run Code Online (Sandbox Code Playgroud)

使用时产生奇怪的结果:

return $this->hasMany('App\Models\User', 'favorites', 'building_id', 'user_id');
Run Code Online (Sandbox Code Playgroud)

只有在这种情况下它才会返回所有用户,即使收藏夹只有一条记录.

尝试使用调试getQueryLog只是给我一个空数组.

print_r(\DB::connection('mongodb')->getQueryLog());
Run Code Online (Sandbox Code Playgroud)

我已经完成了这项工作mysql并且从未遇到过问题.所以不确定问题的来源.

Mur*_*dia 4

你能尝试一下这些吗,我知道它是同样的事情,但可能会成功:

use App\User;
use App\Item;

class Item {

    public function favorites()
    {
       return $this->hasMany('User');
    }
}

class User {

    public function favorites()
    {
       return $this->hasMany('Item');
    }
}

class Favourite {

        public function users()
        {
           return $this->belongsTo('User');
        }

        public function items()
        {
           return $this->belongsTo('Item');
        }
    }
Run Code Online (Sandbox Code Playgroud)

还添加上述关系的逆关系,例如:belongsTo。然后尝试这个查询:

//Just for testing purpose, if raw query returns right result
$items = DB::table('items')
->join('favorites','items.id','=','favorites.id')
->get();
Run Code Online (Sandbox Code Playgroud)