【问题标题】:Multiple where conditions with several different cases具有几种不同情况的多个 where 条件
【发布时间】:2022-01-08 19:25:51
【问题描述】:

我有一个问题,我无法理解,就像逻辑上一样。

情况如下:

我有一个用户提交申请,该申请可以是:

  1. 被用户取消

  2. 被公司取消

  3. 公司认可

现在为了避免有人多次提交工作申请,我需要检查其中任何一个值是否为真,这是我的申请迁移:

public function up()
    {
        Schema::create('bewerbungens', function (Blueprint $table) {
            $table->id('Bewerbung_ID');
            $table->string('bewerber_email');
            $table->bigInteger('Stellenanzeigen_ID');
            $table->boolean('is_Accepted')->default(false);
            $table->date('accept_Date')->nullable();
            $table->boolean('is_Canceled')->default(false);
            $table->date('cancel_Date')->nullable();
            $table->boolean('is_Canceled_Bewerber')->default(false);
            $table->date('cancel_Date_Bewerber')->nullable();
        });
    }

现在在我处理应用程序提交的控制器中,我首先检查用户是否有一个活动的应用程序,然后使用此查询检查这三列的值:

$tmp = DB::table('bewerbungens')
            ->where('bewerber_email', $request->email)
            ->where('Stellenanzeigen_ID', $request->Stellenanzeigen_ID)
            ->where('is_Canceled_Bewerber', '=', false)
            ->orWhere('is_Accepted', '=', false)
            ->orWhere('is_Canceled', '=', false)
            ->count();

因此,第一部分是检查该用户是否有针对此特定职位发布的申请。但是我只是不明白我需要如何检查其中一个值是否为真。

我想过为每一列单独查询,然后在 if 语句中检查它们,如下所示:

$tmp = DB::table('bewerbungens')
            ->where('bewerber_email', $request->email)
            ->where('Stellenanzeigen_ID', $request->Stellenanzeigen_ID)
            ->count();

        $tmp1 = DB::table('bewerbungens')
            ->where('bewerber_email', $request->email)
            ->where('Stellenanzeigen_ID', $request->Stellenanzeigen_ID)
            ->get('is_Canceled_Bewerber');

        $tmp2 = DB::table('bewerbungens')
            ->where('bewerber_email', $request->email)
            ->where('Stellenanzeigen_ID', $request->Stellenanzeigen_ID)
            ->get('is_Accepted');

        $tmp3 = DB::table('bewerbungens')
            ->where('bewerber_email', $request->email)
            ->where('Stellenanzeigen_ID', $request->Stellenanzeigen_ID)
            ->get('is_Canceled');
        $a = $tmp1[0]->is_Canceled_Bewerber;
        $b = $tmp2[0]->is_Accepted;
        $c = $tmp3[0]->is_Canceled;

        if ($tmp != 0 && isFalse($a) && isFalse($b) && isFalse($c)) {
            ....
        }

感谢您的任何意见,因为我现在感觉自己很笨,脑子里好像有一个巨大的障碍。

【问题讨论】:

  • 无论这些字段的状态如何,他们是否可以多次发布同一职位?如果他们关闭了申请,他们可以为同一个工作提交新的申请吗?
  • 是的,如果他们自己关闭了申请,他们可以重新申请!
  • 对不起,一旦他们被公司接受或拒绝,他们就不能再申请了。所以当is_Canceledis_Accepted 为真时。当is_Canceled_Bewerber 在现有应用程序中为真时,他们可以重新申请
  • 只是一个建议:使用状态列而不是is_Canceled,is_Accepted 多个列
  • @Garry 是的,这将是最好和最干净的解决方案!但是我不允许这样做,这是针对 uni 的,我们必须在开始编程之前给出最终的数据库设计,如果我现在更改某些内容,它会对我的成绩产生负面影响,因为他们说当我们需要更改某些内容时我们的计划很糟糕:/

标签: php mysql laravel eloquent logic


【解决方案1】:

据我了解,如果用户已经申请,则无法申请。不管是接受还是取消都对吗?

所以你可以检查表上是否存在记录,如果这样你不会让用户再次申请

    $tmp = DB::table('bewerbungens')
        ->where('bewerber_email', $request->email)
        ->where('Stellenanzeigen_ID', $request->Stellenanzeigen_ID)
        ->count();

【讨论】:

  • 正确,但他们可以取消申请并重新申请
  • 但应用程序“永远”存在 - 它们不会被删除,只是 is_Canceled 等的布尔值会相应更改
  • 您能否在名为“can_apply”的表中添加新列并在控制器中处理这些规则,例如他们是否取消了他们的应用程序集 can_apply true 或公司取消该应用程序设置为 false。每当用户应用应用程序时,只需检查是否与 ids 匹配,并且它们都具有 can_apply true。
  • 是的,这将是最好的解决方案,我忘了在问题中写下它。我不允许,这是一个大学项目,我们必须事先提交我们的数据库设计,并且不允许更改某些内容。或者我们可以改变一些东西,但它会影响成绩,因为如果我们需要改变一些东西,我们计划“不好”
  • 是的,我知道,但是他们有我的所有列的数据库模型,所以他们可以检查最后是否还有一列:/ 有点愚蠢,但它就是这样。感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多