定义模型关系时如何在中间表而非关系表上添加条件

时间:2019-04-01 08:50:18

标签: laravel eloquent php-7 laravel-5.7

我有一个名为company_team的关系表,它与companyuser有关系,并且is_ceo表中有一个字段company_team用来标记天气公司团队成员是首席执行官。以下是我的模型定义

class CompanyTeam extends Pivot
{
    /**
     * return all company team member with out ceo
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function team_member()
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    /**
     * return only ceo's info
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function company_ceo()
    {
        $this->where('is_ceo', 1); // it dosen't work, but it is effect l want
        return $this->belongsTo(User::class, 'user_id');
    }
}

我使用addGlobalScope搜索了一个答案,但它不适合我,因为当我同时使用team_membercompany_ceo关系时,它将在两个

3 个答案:

答案 0 :(得分:0)

定义关系时不能添加条件。 执行查询时必须添加条件。

CompanyTeam::with(['company_ceo' => function ($q) use() { $q->where('is_ceo', 1); }]) ->get();

答案 1 :(得分:0)

aria-hidden

我希望这会有所帮助。祝您有美好的一天,并祝您编程愉快...:)

答案 2 :(得分:0)

在用户模型中,您可以定义范围

public function scopeCompanyCeo($query){
return $query->where('is_ceo',1);
}

然后您可以像在控制器中一样使用

$user = User::find(1)->companyCeo()->get();