无法在laravel 5.5 application

时间:2018-06-17 03:18:30

标签: php laravel eloquent relationship

我正在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]。

如何获取已登录编辑器预订的所有作者应用程序的列表?

1 个答案:

答案 0 :(得分:1)

默认情况下,laravel使用方法名称后缀为_id的列,根据您的方法名称,它会查找authorReq_id。因此,您要在author_requests表上创建一列,如果你没有任何定义关系的列。或者,如果您已经有一个列但名称不同,那么您可以将第二个参数传递给belongsTo方法,如下所示:

public function authorReq()
{ 
     return $this->belongsTo("App\AuthorRequest", 'column_that_references_foreign_key'); 
}

希望它有所帮助。