我正在laravel 5.5中开发一个多作者博客。我的情况是这样的: 每当有人想作为作者加入博客网站时,他/她必须发送申请表。这些应用程序将由其中一位编辑(在系统中的许多编辑之中)批准/拒绝。 Users表包含编辑器。
因此,无论何时创建应用程序,都可以由多个编辑者查看。其中一位编辑需要预订处理申请。这样做是为了防止多个编辑者查看同一个应用程序。一旦编辑者预订了该应用程序,他就可以批准/拒绝该作者应用程序。如果他在预订申请后选择不申请,他必须将其发布,以便其他编辑可以预订。因此,一个应用程序不会同时映射到多个用户/编辑器。
现在我的要求是查找当前登录的编辑器预订的所有应用程序。我无法形成正确的关系。
我的表是:
user (represent the editors)
Id, name, email, role_id, password
author_requests (represents the applications submitted by interested editors)
name, password, email, phone, city, country, profile_pic, bio, display_name, sample_article_link1, sample_article_link2, sample_article_link3, status
request_bookings (represent the bookings made by the editors)
id, item_id, item_type, user_id, status, status_date
在request_bookings表中,item_id包含应用程序ID,item_type包含“auhor”的模型类型。保留这些字段是因为像预订作者应用程序一样,提出了与建议的帖子标题和帖子文章相同的需求。
我的模特是:
class User extends Authenticatable
public function bookings(){
return $this->hasMany("App\RequestBooking");
}
}
class AuthorRequest extends Model{
public function bookings(){
return $this->hasMany("App\RequestBooking");
}
}
class RequestBooking extends Model{
public function user(){
return $this->belongsTo("App\User");
}
public function authorReq(){
return $this->belongsTo("App\AuthorRequest");
}
}
当我尝试: AUTH() - >用户() - > bookings-> authorReq
它给了我错误: 例外 此集合实例上不存在属性[authorReq]。
如何获取已登录编辑器预订的所有作者应用程序的列表?
答案 0 :(得分:1)
默认情况下,laravel使用方法名称后缀为_id
的列,根据您的方法名称,它会查找authorReq_id
。因此,您要在author_requests
表上创建一列,如果你没有任何定义关系的列。或者,如果您已经有一个列但名称不同,那么您可以将第二个参数传递给belongsTo
方法,如下所示:
public function authorReq()
{
return $this->belongsTo("App\AuthorRequest", 'column_that_references_foreign_key');
}
希望它有所帮助。