查询以获取与工作人员相关的数据(数据透视表)

时间:2019-07-10 06:43:51

标签: php mysql laravel eloquent

我有这个模型:

STAFF
-----
id
name


PAGE_STAFF
----------
page_id
staff_id


PAGE
----
id
title
parent_id



PARENT_PAGE
-----------
id
title

以及类似的关系方法:

     in Staff Model
     /**
     * The areas that belongs to the staff member.
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function pages()
    {
       return $this->belongsToMany(Page::class);
    }


   in Page Model
   /**
   * The staff that belongs to the page.
   *
   * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
   */

   public function staff()
   {
    return $this->belongsToMany(Staff::class);
   }

PARENT_PAGE包含“主页”的ID(和标题)。该模型未与任何模型连接,我将其用于过滤器出现。我的意思是我只需要page_staff中的page_id,即parent_page.id == page_staff.page_id。

但是我需要知道数据透视表“ page_staff”中的条目。所需的查询是

“ page_staff”模型和page_staff.page_id == parent_page.id中包含的所有工作人员(page_staff.staff_id)。

此后,我需要所有人员模型(staff.id)

我该如何在雄辩中做到这一点?

最诚挚的问候

1 个答案:

答案 0 :(得分:1)

在所有这些方面,对于ParentPage的连接方式有些困惑。要使所有员工都在数据透视表中,我们可以使用has()进行操作。当我知道父页面在此域中的位置时,将更新问题。

$staffWithPages = Staff::whereHas('pages.parent', function ($query) {
    $query->where('laravel_reserved_0.id', '!=', 'page_staff.page_id');
})->get();

如果要使用ID,请使用Laravel Collection采摘方法。

$staffWithPages->plukc('id')->all();