我有这个模型:
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)
我该如何在雄辩中做到这一点?
最诚挚的问候
答案 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();