如何使用laravel进行条件查询?

时间:2019-07-11 15:31:45

标签: php mysql laravel orm eloquent

你好朋友,我需要帮助,我的问题是我需要检查收藏夹表中是否已经存在某些数据,这些数据无法再次添加,例如,想要添加先前注册的促销的用户不允许他再次添加。 但是我需要满足的条件是,如果user_id = 9的用户在“ promocion_id = 30”的收藏夹表中输入了促销,他将无法重新输入该promocion_id,但是如果另一个user_id = 13的用户想要添加相同的promocion_id = 30,那么我可以my table favoritos

$promocionid = request('promocion_id');
$userid = request('user_id');
if($query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get())
{
    return response()->json([$query,
        'message' => 'esta promocion ya ha sido agregada anteriormente'],422);
}else{
    $agregar = new PromocionesFavoritasUsers;
    $agregar->user_id = 13;
    $agregar->promocion_id = 30;
    $agregar->save();
    return response()->json([$agregar,
    'message' => 'Se agrego con exito esta promoción'],200);

}

在放置数字的位置,我将放置变量$ promocion id和$ user id(我将这些数字与邮递员一起尝试),但我仅收到消息“此促销活动已被添加”],422 < / p>

3 个答案:

答案 0 :(得分:0)

我怀疑您的问题在这里...

if($query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get())

即使结果为空,该条件仍将评估为true,因此您可能应该对此进行更多扩展。

$query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get()
if ($query->count() > 0) {
    ....
}

答案 1 :(得分:0)

您几乎完全正确了。您想检查数据库以查看是否存在针对通过$request对象发送的两个参数的提升。如果是这样,则不允许进行新的促销。您现在拥有它的方式,由于这些值已经存在于数据库中并且集合将是真实值,因此它将始终返回422。

首先,需要从$request正确获取变量:

public function whateverYourFunctionIsCalled(Request $request){
    $promocionid = $request->get('promocion_id');
    $userid = $request->get('user_id');
    // Etc
}

然后,在相同的函数中,尽可能多地调用查询:

$exists= PromocionesFavoritasUsers::where('user_id',$userid)->where('promocion_id',$promocionid )->first();

检查是否返回了完全匹配的结果(非null),如果存在,则不要继续前进:

if(isset($exists))
 {
      return response()->json([$query,
           'message' => 'esta promocion ya ha sido agregada anteriormente'],422);
  }else{ // Create a new promotion }

答案 2 :(得分:0)

更改

if($query = PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->get())

if(PromocionesFavoritasUsers::where('user_id',13)->where('promocion_id',30)->exists())
如果任何记录满足WHERE条件,则

exists()返回TRUE。否则,它将返回FALSE