如何使用 laravel Eloquent 关系获得社区关注者
How can I get the commnunity followers by using laravel Eloquent relationship
我正在尝试使用 Laravel eloquent 关系创建社区关注系统,我无法解决问题,请帮助
基本上我正在尝试创建基于社区(例如:商业与专业、健康与保健、科学与技术等)的事件系统。
它给我以下错误
Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'acp_db.community_users' doesn't exist (SQL: select * from `community_users` where `community_users`.`id` = 8 limit 1) in file /Users/muhammadowais/mowais/academics-provider/website/working/acpapi/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 664
为了通过 Id 获取社区的关注者 我创建了以下表格
1) 用户
2) event_categories(你可以说社区)
3) community_user (user_id, community_id)
控制器
public function communityBySlug($slug){
$eventCategory = EventCategories::where(['slug' => $slug])->first();
$eventCategoryId = $eventCategory->id;
// Getting users by community id
$users = CommunityUsers::find(8)->users();
return Response::json(
[
'data' => $eventCategory,
'community_followers' => $users
]
);
}
模型:社区用户
class CommunityUsers extends Model
{
protected $fillable = ['community_id', 'user_id'];
protected $guarded = [];
public function Users(){
return $this->belongsToMany(User::class, 'users');
}
}
假设 community_id
是您 CommunityUsers
table 中的主键,问题出在您的 Users()
函数中:
public function Users(){
return $this->belongsToMany(User::class, 'users');
}
belongsToMany
的第二个参数应该是外键,也就是user_id
假设社区用户是映射多对多关系的模型 table,您应该在数据库中为该模型指定正确的 table 名称。
class CommunityUsers extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'community_users';
}
此外,请记住 Eloquent 不支持 复合主键 ,因此您必须设置 community_id
或 user_id
作为 CommunityUsers
模型中的 主键 使用 find()
方法,否则 Laravel 将按 id
列搜索.
我宁愿在关系 table 中插入一个新的主要自动增量列,并使用如下过滤条件检索特定社区:
CommunityUsers::where('community_id', $id)->first();
注意:您也可以将该过滤器作为 CommunityUsers
作用域方法。
此外,请注意您从 Users
到 CommunityUsers
的关系是 一对多 关系(一个 User
映射到多个 CommunityUsers
对 ([community_id, user_id]))
重新思考关系映射
如果考虑三个 table,则可以将其建模为 Users
和 Communities
之间的 多对多 关系。
关系应该是:
型号:用户
class User extends Authenticatable
{
public function communities()
{
return $this->belongsToMany(EventCategories::class, 'community_user', 'user_id', 'community_id');
}
}
模型:EventCategories(假设这是您的社区模型)
class EventCategories extends Model
{
public function users()
{
return $this->belongsToMany(User::class, 'community_user', 'community_id');
}
}
注意: 以上代码可能需要根据您的模型及其 table 定义进行一些调整。
关系定义后,您可以直接在 EventCategories
模型上使用它:
public function communityBySlug($slug){
$eventCategory = EventCategories::with('users')
->whereSlug($slug)
->first();
return Response::json(
[
'data' => $eventCategory,
'community_followers' => $eventCategory->users
]
);
}
我正在尝试使用 Laravel eloquent 关系创建社区关注系统,我无法解决问题,请帮助
基本上我正在尝试创建基于社区(例如:商业与专业、健康与保健、科学与技术等)的事件系统。
它给我以下错误
Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'acp_db.community_users' doesn't exist (SQL: select * from `community_users` where `community_users`.`id` = 8 limit 1) in file /Users/muhammadowais/mowais/academics-provider/website/working/acpapi/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 664
为了通过 Id 获取社区的关注者 我创建了以下表格
1) 用户
2) event_categories(你可以说社区)
3) community_user (user_id, community_id)
控制器
public function communityBySlug($slug){
$eventCategory = EventCategories::where(['slug' => $slug])->first();
$eventCategoryId = $eventCategory->id;
// Getting users by community id
$users = CommunityUsers::find(8)->users();
return Response::json(
[
'data' => $eventCategory,
'community_followers' => $users
]
);
}
模型:社区用户
class CommunityUsers extends Model
{
protected $fillable = ['community_id', 'user_id'];
protected $guarded = [];
public function Users(){
return $this->belongsToMany(User::class, 'users');
}
}
假设 community_id
是您 CommunityUsers
table 中的主键,问题出在您的 Users()
函数中:
public function Users(){
return $this->belongsToMany(User::class, 'users');
}
belongsToMany
的第二个参数应该是外键,也就是user_id
假设社区用户是映射多对多关系的模型 table,您应该在数据库中为该模型指定正确的 table 名称。
class CommunityUsers extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'community_users';
}
此外,请记住 Eloquent 不支持 复合主键 ,因此您必须设置 community_id
或 user_id
作为 CommunityUsers
模型中的 主键 使用 find()
方法,否则 Laravel 将按 id
列搜索.
我宁愿在关系 table 中插入一个新的主要自动增量列,并使用如下过滤条件检索特定社区:
CommunityUsers::where('community_id', $id)->first();
注意:您也可以将该过滤器作为 CommunityUsers
作用域方法。
此外,请注意您从 Users
到 CommunityUsers
的关系是 一对多 关系(一个 User
映射到多个 CommunityUsers
对 ([community_id, user_id]))
重新思考关系映射
如果考虑三个 table,则可以将其建模为 Users
和 Communities
之间的 多对多 关系。
关系应该是:
型号:用户
class User extends Authenticatable
{
public function communities()
{
return $this->belongsToMany(EventCategories::class, 'community_user', 'user_id', 'community_id');
}
}
模型:EventCategories(假设这是您的社区模型)
class EventCategories extends Model
{
public function users()
{
return $this->belongsToMany(User::class, 'community_user', 'community_id');
}
}
注意: 以上代码可能需要根据您的模型及其 table 定义进行一些调整。
关系定义后,您可以直接在 EventCategories
模型上使用它:
public function communityBySlug($slug){
$eventCategory = EventCategories::with('users')
->whereSlug($slug)
->first();
return Response::json(
[
'data' => $eventCategory,
'community_followers' => $eventCategory->users
]
);
}