查询以检查是否有价格> 0“

时间:2018-07-30 13:40:19

标签: laravel

我有一个与会议关联的表registration_types,一个会议可以有多种注册类型。

因此registration_types表具有以下列:id,名称,价格,conference_id。

我想查询一个特定的会议是否有价格不免费的注册类型,即价格为“> 0”。

我已经有以下会议ID:

    $conference = Conference::where('id',$id)->firstOr(function(){
        return redirect('/');
    });
    $conferenceID = $conference->id;

但是现在您知道如何知道该$ conferenceID的价格不为0的注册类型吗?

型号:

RegistrationType模型:

class RegistrationType extends Model
{

    public function conference(){
        return $this->belongsTo('App\Conference');
    }
}

会议模型:

class Conference extends Model
{
    public function registrationTypes(){
        return $this->hasMany('App\RegistrationType', 'conference_id');
    }
}

使用:

$paidConferences = $conference->whereHas("registrationTypes", function($query) use ($conferenceID){
    $query->where('price', '>', '0');
    $query->where('id', '=', $conferenceID);
})->get();

“ dd($ paidConferences);”显示会议详细信息,例如:

Collection {#331 ▼
  #items: array:1 [▼
    0 => Conference {#330 ▼
      ...
      #attributes: array:22 [▼
        "id" => 1
        "name" => "conference test"
        "description" => null
        ...
      ]
      ...
    }
  ]
}

但是必需的是$ paidConferences显示与会议相关的所有注册类型的总价,因此可以执行以下操作:

@if($paidConferences >0)
<!-- show some html -->
@else
<!-- show some other html -->

@endif

1 个答案:

答案 0 :(得分:2)

首先,对于简单的情况,您可以通过这样做来召开会议

$conference = Conference::find($id);

然后,要获取所有注册类型,这非常简单,只需查询您的registrationTypes关系。让我们开始吧:

$conference->registrationTypes()->where('price','>',0)->get();

如果您发现自己多次使用此查询,并且不想重复自己,则可以在RegistrationType模型内创建范围:

public function scopeNotFree($query)
{
    return $query->where('price','>',0);
}

您的查询现在将如下所示:

$conference->registrationTypes()->notFree()->get();

这还没有结束,根据您使用此查询的频率,您的会议模型中可能还会有一个registrationTypesNotFree关系:

public function registrationTypesNotFree()
{
    return $this->registrationTypes()->notFree();
}

在您的情况下,这可能有点过大,但是这没什么错。这全由您决定:)

最后,知道会议是否具有非免费注册类型将很简单

$conference->registrationTypesNotFree()->count();

$conference->registrationTypes()->notFree()->count();

$conference->registrationTypes()->where('price','>',0)->count();

这些查询都将为您返回一些非免费的相关注册类型。