我正在尝试使用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');
}
}
因此,一个项目可以有很多用户,用户可以有很多项目或“收藏夹”。
当我尝试运行一个简单的查询时:
Item::with('favorites')->get();
收藏夹的关系是一个空数组。
favorites
表很简单,只有三列:
_id, item_id, user_id
我也尝试过使用embedsMany
而没有运气:
return $this->embedsMany('App\Models\User', 'favorites');
我也尝试了各种参数组合。
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');
使用时出现奇怪的结果:
return $this->hasMany('App\Models\User', 'favorites', 'building_id', 'user_id');
只有在这种情况下它才会返回所有用户,即使收藏夹只有一条记录。
同样尝试使用getQueryLog
进行调试只会在任何时候给我一个空数组。
print_r(\DB::connection('mongodb')->getQueryLog());
我使用mysql
完成了此操作,并且从未遇到过问题。所以不确定问题的来源。
答案 0 :(得分:3)
你可以尝试这些吗,我知道它的相同之处,但可能会做到这一点:
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');
}
}
还添加上述关系的反向,如:belongsTo。 然后尝试这个查询:
//Just for testing purpose, if raw query returns right result
$items = DB::table('items')
->join('favorites','items.id','=','favorites.id')
->get();