Laravel Eloquent通过共享关系查询缺席

时间:2017-06-06 18:22:40

标签: php laravel eloquent

我有这样的关系

=> id

public function proposals(){
    return $this->hasMany(Proposal::class)
}

提案

=> request_id
=> company_id

public function request(){
    return $this->belongsTo(Request::class)
}

public function proposals(){
    return $this->belongsTo(Company::class)
}

公司

=> id

public function proposals(){
    return $this->hasMany(Proposal::class)
}

我曾经做过类似的事情:

$request->with('proposals')->whereDoesntHave('company', function($query){
    $query->where('company_id', '<>', 1);
})->get()

但它没有成功。

在这种情况下,如何检索公司尚未发送提案的所有请求

修改

我的数据库架构的简短版本

用户可以有多个公司用户可以请求公司< / strong>通过提案

回复此请求

1 个答案:

答案 0 :(得分:0)

我在架构中看到的是数据透视表关系。

请求可以属于许多公司公司可以有多个请求。两者之间的关系是提案,这是您的数据透视表。

首先,您需要为模型添加正确的关系

class Request { public function companies() { // You will need to probably set the foreign and local keys as extra parameters here return $this->belongsToMany(Company::class, 'proposals')->using(Proposal::class); } } class Company { public function requests() { // You will need to probably set the foreign and local keys as extra parameters here return $this->belongsToMany(Request::class, 'proposals')->using(Proposal::class); } }

最后,您可以使用将成为Proposal对象的pivot获取提案。

要解决原始查询,您只需执行以下操作: $requests = Request::with(['companies' => function($q) { $q->where('companyid', '!=',1); }]);